? Повторяемые сборки - напишите сборки один раз, и запустите их где угодно - на вашем ноутбуке, удаленном и в любом CI.
❤ Супер простое - мгновенно узнаваемое синтаксис - как Dockerfile и Makefile, родившего ребенка.
? Совместимый с каждым языком, структурой и инструментом построения - если он работает на Linux, он работает на земле.
? Отлично подходит для Monorepos и Polyrepos - организуйте свою логику сборки, однако имеет смысл для вашего проекта.
? Fast Builds - Сборка кэширования и параллельное выполнение делают сборки быстро.
♻ повторно используйте, не повторяйте - никогда не пишите один и тот же код в нескольких сборках снова.
? Earthly - это универсальная, доступная структура CI/CD, которая запускает каждый трубопровод внутри контейнеров, давая вам повторяемые сборки, которые вы пишете один раз и запускаете в любом месте. Он имеет супер простой, мгновенно узнаваемый синтаксис, который легко писать и понимать - например, Dockerfile и Makefile, родившего ребенка. И он использует и увеличивает популярные инструменты сборки вместо того, чтобы заменить их, поэтому вам не нужно переписать все свои сборки, независимо от того, какие языки вы используете.

Земные пробеги все строятся в контейнерах, делая их автономными, изолированными, повторяющимися и портативными. Это обеспечивает более быструю итерацию в сценариях сборки и легче отлаживать, когда что -то идет не так -больше нет git commit -m "try again" . Когда вы пишете сборку, вы знаете, что она будет выполняться правильно, где бы она ни работала - ваш ноутбук, ноутбук коллеги или любой CI. Вам не нужно настраивать инструменты для конкретного языка, устанавливать дополнительные зависимости или усложнять свои сценарии сборки, чтобы убедиться, что они совместимы с различным OSS. Earthly дает вам последовательные, повторяемые сборки независимо от того, где они бегут.
Синтаксис Earthly легко написать и понять. Большинство инженеров могут мгновенно читать приземление, не зная о земле. Мы объединили некоторые из лучших идей от Dockerfiles и Makefiles в одну спецификацию - такие как Dockerfile и Makefile, родившего ребенка.
Земные работы с компиляторами и создавать инструменты, которые вы используете. Если он работает на Linux, он работает на земле. И вам не Cargo.toml переписать свои существующие go.mod или заменять свой package.json build.gradle Вы можете использовать Earthly в качестве обертки вокруг существующего инструмента и при этом получить повторяющиеся сборки Earthly, параллельное выполнение и создание кэширования.
Земля отлично подходит как для Monorepos, так и для полирепо. Вы можете разделить свою логику сборки на нескольких приземлениях, помещая немного глубже внутри структуры каталогов или даже в других репозиториях. Ссылка на цели из других приземлений легко, независимо от того, где они хранятся. Таким образом, вы можете организовать свою логику сборки, однако имеет наибольший смысл для вашего проекта.
Земные автоматически выполняют целевые показатели сборки параллельно и максимально используют кэш. Это делает сборки быстро. Earthly также обладает мощными общими способностями кэширования, которые ускоряют строительные настройки, часто бегущие по команде или в песочнических средах, таких как земные спутники, действия GitHub или ваш CI.
Если у вашей сборки есть несколько шагов, земная воля:
Никогда больше не нужно писать один и тот же код в нескольких сборках. С земной, вы можете повторно использовать цели, артефакты и изображения в нескольких заземлениях, даже в других репозиториях, в одной линии. Earthly является кеш-атмосфером, основываясь на отдельных хешах каждого файла, и имеет общие возможности кэширования. Таким образом, вы можете создать обширную и эффективную иерархию сборки, которая выполняет только минимальные необходимые шаги.

Земный предназначен для использования как на вашей машине разработки, так и в CI. Он работает поверх вашей платформы CI/CD (например, Jenkins, Circle CI, Github Deciates и Gitlab CI/CD). Earthly обеспечивает преимущества современной системы автоматизации сборки, где бы она ни работала, таких как кэширование и параллелизм. Это клейкий слой между инструментами для сборки языка (например, Maven, Gradle, NPM, PIP, Go Build) и CI, работающим как обертка вокруг вашей сборки сборки и логики сборки, которая изолирует выполнение из среды, в которой они работают.
Короче говоря: контейнеры , кэширование слоя и сложные графики сборки !
Земные выполнения сборки в контейнерах, где выполнение изолировано. Зависимости сборки явно указаны в определении сборки, что делает сборку самодостаточной.
Мы используем целевую систему, чтобы помочь пользователям разорвать сложные сборки на многоразовые детали. Ничто не разделяется между целями, кроме четко заявленных зависимостей. Ничто не разделяется, не означает неожиданные условия гонки. Фактически, сборка выполняется параллельно, когда это возможно, без какой -либо необходимости, чтобы пользователь заботился о каких -либо взаимодействиях с блокировкой или неожиданными средами.
Обратите внимание, что заземления могут показаться очень похожими на многоэтапные сборки Dockerfile. На самом деле та же технология используется внизу. Тем не менее, ключевое отличие состоит в том, что Earthly предназначена для того, чтобы быть системой сборки общего назначения, а не только спецификации изображения Docker. Узнайте больше о том, насколько земной отличается от Dockerfiles.
См. Инструкции по установке.
Чтобы построить из источника, проверьте страницу.
Вот несколько ресурсов, чтобы вы начали с земных
Смотрите также полную документацию.
Справочные страницы
# Earthfile
VERSION 0.8
FROM golang:1.15-alpine3.13
RUN apk --update --no-cache add git
WORKDIR /go-example
all :
BUILD +lint
BUILD +docker
build :
COPY main.go .
RUN go build -o build/go-example main.go
SAVE ARTIFACT build/go-example AS LOCAL build/go-example
lint :
RUN go get golang.org/x/lint/golint
COPY main.go .
RUN golint -set_exit_status ./...
docker :
COPY +build/go-example .
ENTRYPOINT [ "/go-example/go-example" ]
SAVE IMAGE go-example:latest // main.go
package main
import "fmt"
func main () {
fmt . Println ( "hello world" )
} Вызовите сборку, используя earthly +all .

Примеры для других языков доступны в примерах реж.
Когда это возможно, земля автоматически выполняет цели параллельно.

Сократить время сборки в CI через общее удаленное кэширование.

Построить для нескольких платформ параллельно.
VERSION 0.8
all :
BUILD
--platform = linux/amd64
--platform = linux/arm64
--platform = linux/arm/v7
--platform = linux/arm/v6
+build
build :
FROM alpine:3.18
CMD [ "uname" , "-m" ]
SAVE IMAGE multiplatform-image Не нужно просить вашу команду установить protoc , конкретную версию Python, Java 1.6 или .NET Core Ecosystem. Установите один раз в свой фейл, и он работает для всех. Или, что еще лучше, вы можете просто использовать богатую экосистему Docker Hub.
VERSION 0.8
FROM golang:1.15-alpine3.13
WORKDIR /proto-example
proto :
FROM namely/protoc-all:1.29_4
COPY api.proto /defs
RUN --entrypoint -- -f api.proto -l go
SAVE ARTIFACT ./gen/pb-go /pb AS LOCAL pb
build :
COPY go.mod go.sum .
RUN go mod download
COPY +proto/pb pb
COPY main.go ./
RUN go build -o build/proto-example main.go
SAVE ARTIFACT build/proto-exampleСм. Полный пример кода.
Earthly может использоваться для ссылки и строительства целей из других каталогов или даже других репозиториев. Например, если мы хотим построить пример цели из репозитория github.com/earthly/earthly , мы могли бы выпустить
# Try it yourself! No need to clone.
earthly github.com/earthly/earthly/examples/go:main+docker
# Run the resulting image.
docker run --rm earthly/examples:go Используйте + для ссылки на другие цели и создать сложные взаимозависимости сборки.

Примеры
Тот же каталог (тот же приземление)
BUILD +some-target
FROM +some-target
COPY +some-target/my-artifact ./Другие каталоги
BUILD ./some/local/path+some-target
FROM ./some/local/path+some-target
COPY ./some/local/path+some-target/my-artifact ./Другие репозитории
BUILD github.com/someone/someproject:v1.2.3+some-target
FROM github.com/someone/someproject:v1.2.3+some-target
COPY github.com/someone/someproject:v1.2.3+some-target/my-artifact ./Секреты никогда не хранятся в слоях изображения, и они доступны только для команд, которые им нужны.
earthly set /user/github/token ' shhh... ' release :
RUN --push --secret GITHUB_TOKEN = user/github/token github-release upload file.binDockerfiles были разработаны для определения состава изображений Docker, и именно здесь останавливаются Dockerfiles. Earthly принимает некоторые ключевые принципы Dockerfiles (например, кэширование слоя), но расширяет варианты использования. Например, Earthly может вывозить регулярные артефакты, запустить устройства и интеграционные тесты и создавать несколько изображений Docker за раз - все вне сферы действия Dockerfiles.
Можно использовать DockerFiles в сочетании с другими технологиями (например, Makefiles или Bash Files) для решения таких вариантов использования. Тем не менее, эти комбинации трудно параллелизировать, сложные для масштабирования по репозиториям, поскольку им не хватает надежной системы импорта, и часто по -настоящему варьируются от одной команды к другой. Earthly не имеет этих ограничений, так как он был разработан как система сборки общего назначения.
Например, Earthly представляет более богатую систему ссылки на цель, артефакт и изображение, позволяющая лучше повторно использовать в сложных сборках, охватывающих один большой репозиторий или несколько репозиториев. Поскольку DockerFiles предназначено только для описания одного изображения за раз, такие функции выходят за рамки применимости DockerFiles.
Проверьте справочную страницу DOC Earthfile. У него есть все команды, и указывает, какие команды такие же, как команды Dockerfile, а какие новые.
Да! Вы можете использовать команду FROM DOCKERFILE чтобы унаследовать команды в существующем Dockerfile.
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestВы также можете принести возможность перенести свои Dockerfiles на землю полностью. Перевод Dockerfiles в приземление, как правило, является вопросом копирования и внесения незначительных корректировок. Смотрите страницу начала работы для некоторых примеров приземления.
Bazel - это инструмент сборки, разработанный Google, для оптимизации скорости, правильности и воспроизводимости их внутренней кодовой базы Monorepo. Основное различие между Bazel и Earthly заключается в том, что Bazel является системой сборки , тогда как Earthly-это среда CI/CD общего назначения . Для более подробного объяснения см. В наш FAQ.
Earthly лицензируется в соответствии с общедоступной лицензией Mozilla версии 2.0. Смотрите лицензию.