?可重複的構建-在筆記本電腦,遙控器和任何CI中寫入構建一次,然後將它們運行到任何地方。
❤️超級簡單-立即可識別的語法 - 像Dockerfile和Makefile有了孩子。
?與每種語言,框架和構建工具兼容-如果它在Linux上運行,它將在地上運行。
?非常適合MonorePos和Polyrepos-組織您的構建邏輯對您的項目最有意義。
?快速構建-構建緩存和並行執行可以自動快速構建。
♻️重複使用,不要重複-切勿在多個構建中編寫相同的代碼。
?塵世是一種通用,平易近人的CI/CD框架,可在容器內部運行每個管道,為您提供一次可重複的構建,並在任何地方運行。它具有一個超級簡單,可以立即識別的語法,易於寫和理解 - 例如Dockerfile和Makefile有了孩子。而且它利用和增強了流行的構建工具,而不是更換它們,因此無論使用哪種語言,您都不必重寫所有構建工具。

塵世的所有構建都在容器中,使它們具有獨立,孤立,可重複和便攜。這允許在構建腳本上更快地迭代,並在出現問題時更容易進行調試 - 不再git commit -m "try again" 。當您編寫構建時,您知道它的運行方式將正確執行 - 筆記本電腦,同事的筆記本電腦或任何CI。您不必配置特定語言的工具,安裝其他依賴項或使構建腳本複雜化,以確保它們與不同的OSS兼容。地球為您提供一致的,可重複的構建,無論它們在哪裡運行。
世俗的語法很容易寫和理解。大多數工程師可以立即閱讀地球填充,而無需事先了解地球。我們將碼頭文件和makefiles的一些最佳想法結合在一起,例如Dockerfile和Makefile有了孩子。
塵世與編譯器一起使用,並構建您使用的工具。如果它在Linux上運行,它將在塵世上運行。 Cargo.toml ,您不必重寫現有go.mod構建或替換package.json build.gradle您可以在現有工具周圍用作塵埃包裝,並且仍然可以獲得塵世的重複構建,並行執行和構建緩存。
地球非常適合monorepos和polyrepos。您可以將構建邏輯跨越多個地球文件,將目錄結構甚至在其他存儲庫中放置得更深。無論將其存儲在哪裡,都很容易從其他地球填料中引用目標。因此,您可以組織構建邏輯,但是對您的項目來說是最有意義的。
地球自動執行構建目標並聯,並最大程度地使用緩存。這使得構建很快。世俗的還具有強大的共享緩存功能,可以在團隊或沙盒環境中(例如地球衛星,github動作或您的CI)構建加快速度。
如果您的構建有多個步驟,地球將:
不必再在多個構建中編寫相同的代碼。借助世俗的,您可以在多個地球文件中重複使用目標,人工製品和圖像,甚至是其他存儲庫中的一個線。基於每個文件的各個哈希,地球是緩存的意識,並且具有共享的緩存功能。因此,您可以創建一個龐大而高效的構建層次結構,僅執行最低要求的步驟。

地球旨在在您的開發機器和CI中使用。它在CI/CD平台的頂部(例如Jenkins,Circle CI,Github Action和Gitlab CI/CD)。世俗的構建自動化系統在任何運行的地方(例如緩存和並行性)都提供了好處。它是特定於語言的構建工具(例如Maven,Gradle,NPM,Pip,Go Build)和CI之間的膠水層,像包裝器一樣在構建工具上工作,並構建邏輯,以隔離構建與所運行環境的執行。
簡而言之:容器,層緩存和複雜的構建圖!
地球執行在隔離執行的容器中構建。構建的依賴性在構建定義中明確指定,從而使構建能夠自給自足。
我們使用基於目標的系統來幫助用戶將復雜的構建分解為可重複使用的零件。除了明確聲明的依賴關係以外,目標之間沒有任何共享。沒有任何共享意味著沒有意外的比賽條件。實際上,構建是盡可能並行執行的,無需用戶照顧任何鎖定或意外的環境交互。
注意,地球文件似乎與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調用構建。

示例DIR中提供了其他語言的示例。
只要可能,地上就會自動執行目標。

通過共享遠程緩存在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生態系統的特定版本。在您的地面上安裝一次,它對所有人都有效。甚至更好的是,您只能利用豐富的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請參閱完整的示例代碼。
地球可用於從其他目錄甚至其他存儲庫中引用和構建目標。例如,如果我們想從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停止的地方。世俗採用了一些碼頭文件的一些關鍵原則(例如層緩存),但在用例上擴展了。例如,世俗可以輸出常規工件,運行單元和集成測試,並一次創建幾個Docker圖像 - 全部在Dockerfiles的範圍之外。
可以將Dockerfiles與其他技術(例如,MakeFiles或Bash Files)結合使用來解決此類用例。但是,這些組合很難平行,在跨存儲庫缺乏強大的進口系統,並且通常從一個團隊到另一個團隊的風格各不相同。世俗的局限性沒有這些限制,因為它被設計為通用構建系統。
例如,世俗引入了一個更豐富的目標,人工製品和圖像參考系統,可以在復雜的構建中更好地重複使用,涵蓋一個大型存儲庫或多個存儲庫。由於Dockerfiles僅一次描述一個圖像,因此此類功能超出了Dockerfiles的適用性範圍。
查看Earthfile參考文檔頁面。它在那裡具有所有命令,並指定哪些命令與Dockerfile命令相同,哪些是新的。
是的!您可以使用FROM DOCKERFILE命令將命令繼承在現有的dockerfile中。
build :
FROM DOCKERFILE .
SAVE IMAGE some-image:latest您也可以選擇將Dockerfiles完全移植到地上。將Dockerfiles轉換為Earthfiles通常是拷貝貼並進行少量調整的問題。有關某些EarthFile示例,請參見“入門”頁面。
Bazel是Google開發的構建工具,旨在優化其內部MonorePo代碼庫的速度,正確性和可重複性。巴澤爾和世俗之間的主要區別在於,巴澤爾是一個構建系統,而塵世是通用的CI/CD框架。有關更深入的解釋,請參閱我們的常見問題解答。
地球是根據Mozilla公共許可證2.0版獲得許可的。請參閱許可證。