?繰り返し可能なビルド-ラップトップ、リモート、および任意のCIで、書き込みビルドを1回、どこでも実行します。
❤️超シンプル-即座に認識可能な構文 - dockerfileやmakefileのように赤ちゃんがいました。
?すべての言語、フレームワーク、ビルドツールと互換性があります- Linuxで実行される場合、地上で実行されます。
? MonoreposとPolyreposに最適です-しかし、あなたのビルドロジックを整理することは、あなたのプロジェクトにとって最も理にかなっています。
?高速ビルド-ビルドキャッシュと並列実行により、ビルドが自動的に高速になります。
♻️再利用、繰り返さないでください-複数のビルドで同じコードを再度書き込まないでください。
? Earthlyは、すべてのパイプラインをコンテナ内で実行する多目的で親しみやすいCI/CDフレームワークであり、1回書いてどこでも実行する繰り返し可能なビルドを提供します。 DockerfileやMakefileには赤ちゃんがいたように、簡単に書くことができ、理解しやすい非常にシンプルで即座に認識可能な構文があります。また、それらを交換する代わりに、一般的なビルドツールを活用して拡張するため、使用する言語に関係なくすべてのビルドを書き換える必要はありません。

Earthly Runはすべてのビルドを容器内で走らせて、自己完結型、孤立した、繰り返し可能な、ポータブルにします。これにより、ビルドスクリプトをより速く繰り返し、何か問題が発生したときに簡単にgit commit -m "try again"できます。ビルドを書くと、ラップトップ、同僚のラップトップ、またはCIなど、どこで実行しても正しく実行されることがわかります。言語固有のツールを構成したり、追加の依存関係をインストールしたり、ビルドスクリプトを複雑にして、異なるOSと互換性があることを確認する必要はありません。 Earthlyは、どこで実行するかに関係なく、一貫した繰り返し可能なビルドを提供します。
Earthlyの構文は、簡単に書き込み、理解できます。ほとんどのエンジニアは、地球の事前の知識なしに、即座にアースファイルを読むことができます。 DockerfilesとMakefilesの最高のアイデアのいくつかを、DockerfileやMakefileには赤ちゃんがいたなど、1つの仕様に組み合わせました。
Earthlyは、使用するコンパイラとビルドツールと連携します。 Linuxで実行されると、地上で実行されます。既存のビルドを書き換えたり、 package.json 、 go.mod 、 build.gradle 、またはCargo.tomlファイルを置き換える必要はありません。既存のツールをめぐるラッパーとしてEarthlyを使用しても、Earthlyの繰り返し可能なビルド、並列実行、ビルドキャッシュを取得できます。
Earthlyは、MonoreposとPolyreposの両方に最適です。ビルドロジックを複数のアースファイルに分割し、ディレクトリ構造内または他のリポジトリ内にさらに深く配置できます。他のアースファイルからのターゲットを参照することは、それらが保存される場所に関係なく簡単です。したがって、ビルドロジックを整理することができますが、プロジェクトにとって最も理にかなっています。
Earthlyは、ビルドターゲットを並行して自動的に実行し、キャッシュを最大限に活用します。これにより、ビルドが速くなります。 Earthlyには、スピードアップがチームを頻繁に実行したり、地球の衛星、Githubアクション、CIなどのサンドボックス環境で頻繁に走ったりする強力な共有キャッシュ機能もあります。
ビルドに複数のステップがある場合、地球は次のとおりです。
同じコードを複数のビルドで再び記述する必要はありません。地上では、他のリポジトリの複数のアースファイルでも、ターゲット、アーティファクト、および画像を単一の行で再利用できます。 Earthlyは、各ファイルの個々のハッシュに基づいてキャッシュアウェアであり、キャッシュ機能を共有しています。そのため、必要な最小ステップのみを実行する広大で効率的なビルドヒエラルキーを作成できます。

Earthlyは、開発マシンとCIの両方で使用されることを意図しています。 CI/CDプラットフォームの上に実行されます(Jenkins、Circle CI、GitHub Actions、GitLab CI/CDなど)。 Earthlyは、キャッシュや並列性など、どこにいても最新のビルドオートメーションシステムの利点を提供します。これは、言語固有のビルドツーリング(Maven、Gradle、NPM、PIP、Go Buildなど)とCIの間の接着層であり、ビルドツーリングを中心にラッパーのように機能し、実行している環境からのビルド実行を分離するロジックをビルドします。
要するに、コンテナ、レイヤーキャッシング、複雑なビルドグラフ!
containers内のビルドを実行します。ここでは、実行が分離されています。ビルドの依存関係は、ビルド定義で明示的に指定されているため、ビルドを自給自足させます。
ターゲットベースのシステムを使用して、ユーザーが複雑なビルドを再利用可能な部分に分割するのを支援します。明確に宣言された依存関係以外のターゲット間で共有されるものはありません。共有されていることは、予期しない人種条件がないことを意味するものはありません。実際、ビルドは、ユーザーがロックまたは予期しない環境の相互作用を処理する必要なく、可能な限り並行して実行されます。
注意EarthFilesは、Dockerfileマルチステージビルドに非常に似ているように見えるかもしれません。実際、同じ技術が下に使用されています。ただし、重要な違いは、地球が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を使用してビルドを呼び出します。

他の言語の例は、例監督で入手できます。
可能な限り、Earthlyはターゲットを並行して自動的に実行します。

共有されたリモートキャッシングを介して、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-imagePython、Java 1.6、または.NETコアエコシステムの特定のバージョンであるprotocをインストールするようチームに依頼する必要はありません。アースファイルに一度インストールすると、すべての人に適しています。またはさらに良いことに、リッチなDockerハブエコシステムを利用することができます。
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 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ファイルなど)と組み合わせて使用して、そのようなユースケースを解決することができます。ただし、これらの組み合わせは並行することが困難であり、堅牢な輸入システムがないため、リポジトリ全体でスケーリングするのが難しく、多くの場合、チームごとにスタイルが異なります。 Earthlyには、汎用ビルドシステムとして設計されたため、これらの制限はありません。
たとえば、Earthlyは、より豊富なターゲット、アーティファクト、および画像参照システムを導入し、単一の大きなリポジトリまたは複数のリポジトリにまたがる複雑なビルドでより良い再利用を可能にします。 DockerFilesは一度に1つの画像を記述することを目的としているため、このような機能はDockerFilesの適用可能性の範囲外です。
EarthFileリファレンスドキュメントページをご覧ください。そこにすべてのコマンドがあり、どのコマンドがDockerFileコマンドと同じで、どのコマンドが新しいかを指定します。
はい! FROM DOCKERFILEコマンドを使用して、既存のdockerfileでコマンドを継承できます。
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latestまた、オプションでdockerfilesを完全に地上に移植することもできます。 Dockerfilesの翻訳は通常、コピーパスティングとマイナーな調整の問題です。いくつかのアースファイルの例については、開始ページを参照してください。
Bazelは、内部モノレポコードベースの速度、正確性、再現性を最適化するためにGoogleが開発したビルドツールです。 BazelとEarthlyの主な違いは、Bazelがビルドシステムであるのに対し、Earthlyは汎用CI/CDフレームワークであることです。より詳細な説明については、FAQを参照してください。
Earthlyは、Mozilla Public Licenseバージョン2.0に基づいてライセンスされています。ライセンスを参照してください。