?可重复的构建-在笔记本电脑,遥控器和任何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版获得许可的。请参阅许可证。