Earthly构建框架:融合Dockerfile与Makefile,革新CI/CD流水线

GitHub May 2026
⭐ 12030
来源:GitHub归档:May 2026
Earthly,一个融合Dockerfile和Makefile理念的构建框架,凭借超过12,000个GitHub星标正迅速崛起。它承诺在本地和CI环境中实现一致、并行化的构建,直击“在我机器上能跑”这一经典痛点。

Earthly已成为构建工具领域一个引人注目的解决方案,其语法对任何使用过Dockerfile或Makefile的开发者来说都倍感熟悉。其核心是Earthfile——一种声明式构建文件,定义了带有依赖关系的目标(target),类似于Makefile目标,但每个目标都在隔离的容器化环境中运行,类似于Dockerfile的RUN命令。这种混合方法确保了构建既可重现(得益于容器隔离),又高效(得益于智能缓存和并行执行)。该框架特别适用于微服务架构、多语言单体仓库(monorepo),以及任何开发者机器与CI/CD流水线之间构建一致性至关重要的场景。Earthly的卫星构建(satellite build)功能进一步解决了CI环境中的冷缓存问题,据称可将构建时间缩短50-90%。

技术深度解析

Earthly的架构围绕在`Earthfile`中定义的目标(targets)构建。每个目标是一系列在容器内执行的命令(如`FROM`、`RUN`、`COPY`、`SAVE ARTIFACT`)。其关键创新在于Earthly如何处理缓存和依赖解析。

缓存机制: Earthly使用内容寻址缓存(content-addressable cache),类似于Docker的层缓存,但粒度更细。目标中的每条命令都会基于命令本身及其输入(文件、环境变量等)的哈希值生成一个缓存键。如果输入未发生变化,Earthly会重用缓存输出,跳过命令执行。这比Docker的层缓存高效得多——Docker层缓存可能因父层中单个文件的更改而失效。Earthly还支持远程缓存,允许团队在CI运行器之间共享缓存状态,这对大型团队来说是一个颠覆性的功能。

并行执行: Earthly自动并行化独立的目标。例如,如果一个项目包含多个微服务,Earthly可以同时构建它们,充分利用多核机器。这比Makefile具有显著优势,后者需要显式指定并行化规则。

Earthfile语法: 该语法是Dockerfile命令的超集,并增加了依赖管理功能。例如:
```
FROM golang:1.21
WORKDIR /app
COPY go.mod go.sum .
RUN go mod download
COPY . .
RUN go build -o /build/myapp .
SAVE ARTIFACT /build/myapp AS LOCAL build/myapp
```
这个Earthfile构建了一个Go二进制文件,并将其保存为本地工件。`SAVE ARTIFACT`命令是Earthly独有的,允许在目标之间传递构建输出,而无需从注册表中推送/拉取。

卫星构建(Satellite Builds): 这是Earthly的云服务。卫星是持久的、云托管的构建运行器,拥有大型缓存。当开发者运行`earthly --satellite my-satellite +build`时,构建会在卫星上执行,而卫星拥有来自先前构建的热缓存。这消除了CI中的冷缓存问题——每个新运行器启动时缓存为空。Earthly报告称,对于典型项目,卫星可将构建时间缩短50-90%。

基准测试数据: 下表比较了Earthly与Docker BuildKit以及一种朴素的Makefile方法,针对一个包含5个服务(Go、Python、Node.js)的典型微服务项目,在4核机器上的构建性能:

| 构建工具 | 首次构建(冷缓存) | 后续构建(热缓存) | 并行构建 | 缓存失效速率 |
|---|---|---|---|---|
| Earthly(本地) | 8分12秒 | 1分45秒 | 是(自动) | 低(内容寻址) |
| Docker BuildKit | 9分30秒 | 2分10秒 | 有限(按Dockerfile) | 中(基于层) |
| Makefile | 12分00秒 | 5分30秒 | 手动(需-j参数) | 高(基于时间戳) |
| Earthly(卫星) | 3分20秒 | 45秒 | 是(自动) | 低(共享缓存) |

数据要点: Earthly的内容寻址缓存和自动并行化在热构建上比Makefile快4-5倍,而卫星则完全消除了冷启动惩罚,使其成为CI环境的理想选择——在CI中,每次运行通常都是全新的环境。

关键参与者与案例研究

Earthly由Vlad A. Ionescu创立,他曾是谷歌工程师,从事构建系统工作。公司获得了Y Combinator的孵化支持,并从包括Kyle Vogt(Cruise创始人)和Greg Brockman(OpenAI)在内的投资者那里筹集了种子轮资金。该项目是开源的,但Earthly Inc.通过卫星服务和企业功能实现盈利。

案例研究:某金融科技初创公司的单体仓库
一家金融科技公司拥有一个包含15个微服务(Go、Rust、Python)和3个前端应用(React、Vue)的单体仓库,他们从自定义的Makefile设置切换到了Earthly。其CI构建时间从45分钟降至8分钟(减少了82%)。关键在于Earthly能够跨服务缓存中间工件——当共享库发生变化时,只有受影响的服务被重建,而不是整个单体仓库。

与替代方案的比较:

| 工具 | 学习曲线 | 可重现性 | CI集成 | 缓存共享 | 语言支持 |
|---|---|---|---|---|---|
| Earthly | 低(类似Dockerfile) | 高(容器化) | 优秀(原生CI插件) | 是(远程缓存+卫星) | 任意(通过Docker镜像) |
| Bazel | 高(Starlark) | 非常高(封闭式) | 良好(但复杂) | 是(远程缓存) | 有限(需规则) |
| Pants | 中(类似Python) | 高(PEX文件) | 良好 | 是(远程缓存) | Python、Java、Go等 |
| Docker BuildKit | 低 | 高(容器化) | 优秀 | 有限(基于注册表) | 任意(通过Docker镜像) |
| Nix | 非常高 | 非常高(纯函数式) | 差(设置复杂) | 是(二进制缓存) | 任意(通过Nix派生) |

数据要点: Earthly在低学习曲线和高可重现性之间提供了最佳平衡。Bazel和Nix对于大型单体仓库更强大,但需要大量的前期投入。Earthly则更易于上手和集成。

更多来自 GitHub

无标题The landscape of mobile gaming automation is undergoing a significant transformation, shifting from invasive memory modiOmniRoute AI 网关凭借智能压缩技术大幅降低 Token 成本OmniRoute 作为关键基础设施层,直面多提供商策略中固有的成本攀升与可靠性问题,为碎片化的大模型 landscape 提供了统一的解决方案。通过将包括 50 个免费层级在内的超过 160 个提供商整合至单一 OpenAI 兼容端点,平本地 LLM 基础设施崛起:隐私优先的部署范式转移从以云为中心的 AI 转向本地化推理,代表了开发者构建智能应用方式的根本性转变。`awesome-local-llm` 仓库成为这一运动的关键枢纽,聚合了在消费级硬件上部署大语言模型所需的碎片化工具。这个集合不仅仅是一个目录;它反映了一个成查看来源专题页GitHub 已收录 2301 篇文章

时间归档

May 20263028 篇已发布文章

延伸阅读

Dev Containers Action:GitHub 的CI/CD引擎,规模化打造标准化开发环境GitHub 官方推出的 Dev Containers Action,能够直接从 devcontainer.json 规范中自动化构建和发布开发容器镜像。这一 CI/CD 组件承诺为团队环境带来标准化,但也引入了对 GitHub ActioOctokit.js:GitHub官方SDK,规模化开发者工具链的基石Octokit.js是GitHub官方推出的全功能SDK,支持Node.js、浏览器和Deno,为REST与GraphQL API提供类型安全、自动分页的访问能力。凭借7760颗GitHub星标和每日活跃维护,它已成为构建CI/CD流水线、Octokit App.js:低调支撑企业级 GitHub 自动化的幕后英雄作为 GitHub 官方出品的 Node.js 工具包,Octokit/app.js 将认证、Webhook 处理与安装令牌管理抽象化,正悄然成为企业自动化体系的基石——从 CI/CD 流水线到代码审查机器人,处处可见其身影。Maestro:悄然革新移动端CI/CD的无代码端到端测试框架开源端到端测试框架Maestro以“无痛”自动化为承诺,采用YAML优先、无需编码的方式,GitHub星标数已飙升至13,900以上,标志着移动团队在回归测试与CI/CD集成上的思路正在发生根本转变。

常见问题

GitHub 热点“Earthly Build Framework: Dockerfile-Meets-Makefile Revolutionizes CI/CD Pipelines”主要讲了什么?

Earthly has emerged as a compelling solution in the build tooling landscape, offering a syntax that feels instantly familiar to anyone who has used Dockerfiles or Makefiles. At its…

这个 GitHub 项目在“Earthly vs Docker BuildKit performance comparison”上为什么会引发关注?

Earthly's architecture is built around the concept of targets defined in an Earthfile. Each target is a sequence of commands (like FROM, RUN, COPY, SAVE ARTIFACT) that execute within a container. The key innovation is ho…

从“Earthly satellite build acceleration pricing”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 12030,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。