? Builds répétables - Écrivez des builds une fois et exécutez-les n'importe où - sur votre ordinateur portable, éloigné et dans n'importe quel CI.
❤️ Super simple - Syntaxe instantanément reconnaissable - comme Dockerfile et Makefile ont eu un bébé.
? Compatible avec chaque langue, cadre et outil de construction - s'il fonctionne sur Linux, il fonctionne sur terre.
? Idéal pour Monorepos et Polyrepos - Organisez votre logique de construction, mais c'est le plus logique pour votre projet.
? Builds Fast - Build Caching et l'exécution parallèle rend les constructions rapides automatiquement.
♻️ Réutilisation, ne répétez pas - n'écrivez plus jamais le même code dans plusieurs builds.
? Earthly est un cadre CI / CD polyvalent et accessible qui exécute chaque pipeline à l'intérieur des conteneurs, vous donnant des versions répétables que vous écrivez une fois et exécutez n'importe où. Il a une syntaxe super simple et instantanément reconnaissable qui est facile à écrire et à comprendre - comme Dockerfile et Makefile ont eu un bébé. Et il exploite et augmente les outils de construction populaires au lieu de les remplacer, vous n'avez donc pas à réécrire toutes vos versions, quelles que soient les langues que vous utilisez.

Earthly exécute toutes les constructions dans des conteneurs, ce qui les rend autonomes, isolés, reproductibles et portables. Cela permet une itération plus rapide sur la construction de scripts et un débogage plus facile lorsque quelque chose ne va pas - plus de git commit -m "try again" . Lorsque vous écrivez une version, vous savez qu'il s'exécutera correctement, peu importe où il fonctionne - votre ordinateur portable, l'ordinateur portable d'un collègue ou tout IC. Vous n'avez pas à configurer des outils spécifiques à la langue, à installer des dépendances supplémentaires ou à compliquer vos scripts de construction pour vous assurer qu'ils sont compatibles avec différents OS. Earthly vous donne des constructions cohérentes et reproductibles, peu importe où ils courent.
La syntaxe terrestre est facile à écrire et à comprendre. La plupart des ingénieurs peuvent lire instantanément un file de terre, sans connaissance préalable de la terre. Nous avons combiné certaines des meilleures idées de Dockerfiles et Makefiles en une seule spécification - comme Dockerfile et Makefile ont eu un bébé.
Earthly fonctionne avec les compilateurs et les outils de construction que vous utilisez. S'il fonctionne sur Linux, il fonctionne sur terre. Et vous n'avez pas à réécrire vos versions existantes ou à remplacer votre package.json , go.mod , build.gradle ou Cargo.toml . Vous pouvez utiliser Earthly comme emballage autour de votre outillage existant tout en obtenant des constructions reproductibles de terre, une exécution parallèle et une mise en cache de construction.
Earthly est idéal pour Monorepos et Polyrepos. Vous pouvez diviser votre logique de construction sur plusieurs fichiers de terrains, en plaçant plus profondément à l'intérieur de la structure du répertoire ou même dans d'autres référentiels. Il est facile de référencer les cibles des autres fichiers de terrassement, peu importe où ils sont stockés. Ainsi, vous pouvez organiser votre logique de construction, mais c'est le plus de sens pour votre projet.
Earthly exécute automatiquement des cibles de construction en parallèle et utilise maximum le cache. Cela rend les constructions rapides. Earthly a également de puissantes capacités de mise en cache partagées que les constructions d'accélération traversent fréquemment une équipe ou dans des environnements de sable, tels que des satellites terrestres, des actions GitHub ou votre CI.
Si votre version a plusieurs étapes, la volonté terrestre:
Je n'ai plus jamais à écrire le même code dans plusieurs builds. Avec Earthly, vous pouvez réutiliser des cibles, des artefacts et des images sur plusieurs fichiers de terrains, même ceux dans d'autres référentiels, en une seule ligne. Earthly est consacré au cache, basé sur les hachages individuels de chaque fichier, et a partagé des capacités de mise en cache. Vous pouvez donc créer une hiérarchie de construction vaste et efficace qui ne fait que l'exécution des étapes minimales requises.

La terre est censée être utilisée à la fois sur votre machine de développement et en CI. Il fonctionne sur votre plate-forme CI / CD (comme Jenkins, Circle CI, GitHub Actions et GitLab CI / CD). Earthly offre les avantages d'un système d'automatisation de construction moderne partout où il fonctionne - comme la mise en cache et le parallélisme. Il s'agit d'une couche de colle entre l'outillage de construction spécifique à la langue (comme Maven, Gradle, NPM, PIP, Go Build) et CI, fonctionnant comme un wrapper autour de votre outillage de construction et de la logique de construction qui isole la construction de l'exécution à partir des environnements dans lesquels ils s'exécutent.
En bref: conteneurs , cache de couche et graphiques de construction complexes !
Earthly exécute des constructions dans des conteneurs, où l'exécution est isolée. Les dépendances de la construction sont explicitement spécifiées dans la définition de la construction, ce qui rend la construction autosuffisante.
Nous utilisons un système basé sur la cible pour aider les utilisateurs à rompre les constructions complexes en pièces réutilisables. Rien n'est partagé entre des cibles autres que les dépendances clairement déclarées. Rien de partagé ne signifie pas de conditions de course inattendues. En fait, la construction est exécutée en parallèle chaque fois que possible, sans aucun besoin pour l'utilisateur de prendre en charge toute interaction de verrouillage ou d'environnement inattendu.
Remarque Earthfiles peut sembler très similaire aux versions à plusieurs étages Dockerfile. En fait, la même technologie est utilisée en dessous. Cependant, une différence clé est que Earthly est conçue pour être un système de construction à usage général, pas seulement une spécification d'image Docker. En savoir plus sur la façon dont la terre est différente de Dockerfiles.
Voir les instructions d'installation.
Pour construire à partir de la source, consultez la page contributive.
Voici quelques ressources pour vous aider à démarrer avec terre
Voir également la documentation complète.
Pages de référence
# 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" )
} Invoquez la construction en utilisant earthly +all .

Des exemples pour d'autres langues sont disponibles dans les exemples dir.
Dans la mesure du possible, Earthly exécute automatiquement des cibles en parallèle.

Coupez les temps de construction dans CI grâce à la mise en cache à distance partagée.

Créez pour plusieurs plates-formes en parallèle.
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 Pas besoin de demander à votre équipe d'installer protoc , une version spécifique de Python, Java 1.6 ou de l'écosystème de base .NET. Installez une fois dans votre file de terre, et cela fonctionne pour tout le monde. Ou encore mieux, vous pouvez simplement utiliser le riche écosystème 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-exampleVoir un exemple complet de code.
La terre peut être utilisée pour référencer et construire des cibles à partir d'autres répertoires ou même d'autres référentiels. Par exemple, si nous voulions construire un exemple de cible à partir du référentiel github.com/earthly/earthly , nous pourrions émettre
# 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 Utilisez + pour référencer d'autres cibles et créer des interdépendances de construction complexes.

Exemples
Même répertoire (même fichier de terrasse)
BUILD +some-target
FROM +some-target
COPY +some-target/my-artifact ./Autres répertoires
BUILD ./some/local/path+some-target
FROM ./some/local/path+some-target
COPY ./some/local/path+some-target/my-artifact ./Autres référentiels
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 ./Les secrets ne sont jamais stockés dans les couches d'une image et ils ne sont disponibles que pour les commandes qui en ont besoin.
earthly set /user/github/token ' shhh... ' release :
RUN --push --secret GITHUB_TOKEN = user/github/token github-release upload file.binDockerfiles a été conçu pour spécifier la composition des images Docker et c'est là que Dockerfiles s'arrête. Earthly prend certains principes clés des dockerfiles (comme la mise en cache de couche) mais développe les cas d'utilisation. Par exemple, Earthly peut produire des artefacts réguliers, exécuter des tests d'unité et d'intégration et créer plusieurs images Docker à la fois - tout en dehors de la portée de Dockerfiles.
Il est possible d'utiliser DockerFiles en combinaison avec d'autres technologies (par exemple, Makefiles ou Bash Files) pour résoudre ces cas d'utilisation. Cependant, ces combinaisons sont difficiles à paralléliser, difficiles à évoluer entre les référentiels car ils manquent d'un système d'importation robuste, et varient souvent de style d'une équipe à l'autre. Earthly n'a pas ces limites car elle a été conçue comme un système de construction à usage général.
Par exemple, Earthly introduit un système de référence cible, d'artefact et d'image plus riche, permettant une meilleure réutilisation dans des versions complexes couvrant un seul grand référentiel ou plusieurs référentiels. Étant donné que DockerFiles est censé décrire une seule image à la fois, ces fonctionnalités sont en dehors de la portée de l'applicabilité de Dockerfiles.
Consultez la page Doc de référence Earthfile. Il a toutes les commandes là-bas et spécifie quelles commandes sont les mêmes que les commandes DockerFile et les nouvelles.
Oui! Vous pouvez utiliser la commande FROM DOCKERFILE pour hériter des commandes dans un dockerfile existant.
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestVous pouvez également éventuellement porter vos docker entièrement terrestres entièrement terrestres. Traduire DockerFiles en FermFiles est généralement une question de copie de copie et d'ajustements mineurs. Voir la page de démarrage pour certains exemples de fichiers Earth.
Bazel est un outil de construction développé par Google pour optimiser la vitesse, l'exactitude et la reproductibilité de leur base de code monorepo interne. La principale différence entre le bazel et la terre est que Bazel est un système de construction , tandis que la terre est un cadre CI / CD à usage général . Pour une explication plus approfondie, consultez notre FAQ.
Earthly est licencié sous la version 2.0 de la licence publique de Mozilla. Voir la licence.