? Construcciones repetibles : escriba compilaciones una vez y las ejecutan en cualquier lugar, en su computadora portátil, remota y en cualquier CI.
❤️ Super simple , sintaxis reconocible al instante, como Dockerfile y Makefile tenían un bebé.
? Compatible con cada idioma, marco y herramienta de construcción : si se ejecuta en Linux, se ejecuta en tierra.
? Ideal para Monorepos y Polyrepos : organice su lógica de compilación, sin embargo, tiene más sentido para su proyecto.
? Construcciones rápidas : la ejecución de almacenamiento en caché y la ejecución paralela hace que las compilaciones se aceleren automáticamente.
♻️ Reutilización, no repita : nunca vuelva a escribir el mismo código en múltiples compilaciones.
? Earthly es un marco de CI/CD versátil y accesible que ejecuta cada tubería dentro de los contenedores, lo que le brinda compilaciones repetibles que escribe una vez y se ejecuta en cualquier lugar. Tiene una sintaxis súper simple e instantáneamente reconocible que es fácil de escribir y comprender, como Dockerfile y Makefile tuvieron un bebé. Y aprovecha y aumenta las herramientas de compilación populares en lugar de reemplazarlas, para que no tenga que reescribir todas sus compilaciones sin importar qué idiomas use.

Earthly corre todas las compilaciones en contenedores, haciéndolos autónomos, aislados, repetibles y portátiles. Esto permite una iteración más rápida en la construcción de scripts y una depuración más fácil cuando algo sale mal, no más git commit -m "try again" . Cuando escriba una compilación, sabe que se ejecutará correctamente sin importar dónde se ejecute: su computadora portátil, la computadora portátil de un colega o cualquier CI. No tiene que configurar herramientas específicas del lenguaje, instalar dependencias adicionales o complicar sus scripts de compilación para asegurarse de que sean compatibles con diferentes OSS. Earthly te ofrece construcciones consistentes y repetibles, independientemente de dónde corran.
La sintaxis terrenal es fácil de escribir y comprender. La mayoría de los ingenieros pueden leer un archivo de tierra al instante, sin un conocimiento previo de terrenal. Combinamos algunas de las mejores ideas de Dockerfiles y Makefiles en una sola especificación, como Dockerfile y Makefile tenían un bebé.
Earthly funciona con los compiladores y las herramientas de compilación que usa. Si se ejecuta en Linux, se ejecuta en tierra. Y no tiene que reescribir sus compilaciones existentes o reemplazar su package.json , go.mod , build.gradle o Cargo.toml . Puede usar Earthly como un envoltorio alrededor de sus herramientas existentes y aún así obtener las construcciones repetibles de tierra, ejecución paralela y construcción de almacenamiento en caché.
Earthly es excelente tanto para Monorepos como para Polyros. Puede dividir su lógica de compilación en múltiples archivos de tierra, colocando un poco más dentro de la estructura del directorio o incluso en otros repositorios. Hacer referencia a objetivos de otros archivos de la tierra es fácil independientemente de dónde estén almacenados. Por lo tanto, puede organizar su lógica de compilación, sin embargo, tiene más sentido para su proyecto.
Earthly ejecuta automáticamente objetivos de compilación en paralelo y hace que el máximo uso de la caché. Esto hace que las construcciones sean rápidas. Earthly también tiene poderosas capacidades de almacenamiento en caché compartido que aceleran las compilaciones frecuentes que se encuentran con un equipo o en entornos de caja de arena, como satélites terrenales, acciones de GitHub o su CI.
Si su construcción tiene múltiples pasos, Earthly Will:
Nunca tenga que volver a escribir el mismo código en múltiples compilaciones. Con terrenal, puede reutilizar objetivos, artefactos e imágenes en múltiples archivos de la tierra, incluso los de otros repositorios, en una sola línea. Earthly es consciente de caché, basado en los hash individuales de cada archivo, y ha compartido capacidades de almacenamiento en caché. Por lo tanto, puede crear una jerarquía de construcción vasta y eficiente que solo ejecute los pasos mínimos requeridos.

Earthly está destinado a usarse tanto en su máquina de desarrollo como en CI. Se ejecuta en la parte superior de su plataforma CI/CD (como Jenkins, Circle CI, GitHub Actions y Gitlab CI/CD). Earthly proporciona los beneficios de un sistema de automatización de construcción moderno donde sea que se ejecute, como almacenamiento en caché y paralelismo. Es una capa de pegamento entre las herramientas de compilación específicas del lenguaje (como Maven, Gradle, NPM, PIP, Go Build) y CI, que funcionan como un envoltorio alrededor de sus herramientas de compilación y la lógica de construcción que aísla la ejecución de la construcción de los entornos que ejecutan.
En resumen: contenedores , almacenamiento en caché de capas y gráficos de construcción complejos !
EJECUESTA EJECUTA EJECUTA CONTENEDORES, donde se aislan la ejecución. Las dependencias de la compilación se especifican explícitamente en la definición de compilación, lo que hace que la compilación sea autosuficiente.
Utilizamos un sistema basado en objetivos para ayudar a los usuarios a dividir las construcciones complejas en piezas reutilizables. No se comparte nada entre objetivos que no sean dependencias claramente declaradas. Nada compartido significa que no hay condiciones de carrera inesperadas. De hecho, la compilación se ejecuta en paralelo siempre que sea posible, sin necesidad de que el usuario se encargue de cualquier bloqueo de bloqueo o entorno inesperado.
Nota Los archivos de tierra pueden parecer muy similares a las compilaciones de Dockerfile Multi-Stage. De hecho, la misma tecnología se usa debajo. Sin embargo, una diferencia clave es que Earthly está diseñado para ser un sistema de construcción de uso general, no solo una especificación de imagen Docker. Lea más sobre cómo el terrenal es diferente de Dockerfiles.
Consulte las instrucciones de instalación.
Para construir desde la fuente, consulte la página contribuyente.
Aquí hay algunos recursos para comenzar con terrenal
Ver también la documentación completa.
Páginas de referencia
# 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" )
} Invoca la construcción usando earthly +all .

Ejemplos para otros idiomas están disponibles en los ejemplos dir.
Siempre que sea posible, Earthly ejecuta automáticamente objetivos en paralelo.

Reduzca los tiempos de construcción en CI a través del almacenamiento en caché remoto compartido.

Construir para múltiples plataformas en paralelo.
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 No es necesario pedirle a su equipo que instale protoc , una versión específica de Python, Java 1.6 o el ecosistema .NET Core. Instale una vez en su archivo de tierra, y funciona para todos. O aún mejor, puede hacer uso del rico ecosistema 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-exampleVer código de ejemplo completo.
El terrenal puede usarse para hacer referencia y construir objetivos de otros directorios o incluso otros repositorios. Por ejemplo, si quisiéramos construir un objetivo de ejemplo desde el repositorio github.com/earthly/earthly , podríamos emitir
# 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 Use + para hacer referencia a otros objetivos y crear complejos interdependencias complejas.

Ejemplos
Mismo directorio (el mismo archivo de tierra)
BUILD +some-target
FROM +some-target
COPY +some-target/my-artifact ./Otros directorios
BUILD ./some/local/path+some-target
FROM ./some/local/path+some-target
COPY ./some/local/path+some-target/my-artifact ./Otros repositorios
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 ./Los secretos nunca se almacenan dentro de las capas de una imagen y solo están disponibles para los comandos que los necesitan.
earthly set /user/github/token ' shhh... ' release :
RUN --push --secret GITHUB_TOKEN = user/github/token github-release upload file.binDockerfiles fueron diseñados para especificar la composición de imágenes de Docker y ahí es donde se detienen Dockerfiles. Earthly toma algunos principios clave de DockerFiles (como el almacenamiento en caché de la capa) pero se expande en los casos de uso. Por ejemplo, el terrenal puede generar artefactos regulares, ejecutar la unidad y las pruebas de integración, y crear varias imágenes de Docker a la vez, todo fuera del alcance de Dockerfiles.
Es posible utilizar DockerFiles en combinación con otras tecnologías (por ejemplo, makefiles o archivos bash) para resolver tales casos de uso. Sin embargo, estas combinaciones son difíciles de paralelizar, desafiantes para escalar en los repositorios, ya que carecen de un sistema de importación robusto, y a menudo varían en estilo de un equipo a otro. Earthly no tiene estas limitaciones, ya que fue diseñada como un sistema de construcción de propósito general.
Por ejemplo, terrenal introduce un sistema de referencia de referencia, artefactos y de imágenes más rico, lo que permite una mejor reutilización en construcciones complejas que abarca un solo repositorio grande o repositorios múltiples. Debido a que Dockerfiles solo está destinado a describir una imagen a la vez, tales características están fuera del alcance de la aplicabilidad de Dockerfiles.
Consulte la página Doc de referencia de EarthFile. Tiene todos los comandos allí y especifica qué comandos son los mismos que los comandos DockerFile y cuáles son nuevos.
¡Sí! Puede usar el comando FROM DOCKERFILE para heredar los comandos en un DockerFile existente.
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestTambién puede portar opcionalmente su dockerfiles a tierra por completo. La traducción de Dockerfiles a los archivos de la tierra suele ser una cuestión de copiar y hacer ajustes menores. Vea la página de Inicio para ver algunos ejemplos de archivos Earth.
Bazel es una herramienta de compilación desarrollada por Google para optimizar la velocidad, la corrección y la reproducibilidad de su base de código de monoreso interno. La principal diferencia entre bazel y terrenal es que el bazel es un sistema de construcción , mientras que la tierra es un marco CI/CD de uso general . Para una explicación más profunda, consulte nuestras preguntas frecuentes.
Earthly tiene licencia bajo la versión de Licencia Pública de Mozilla 2.0. Ver licencia.