← 中文资源

简体中文版本

Bazel

Bazel 把代码与依赖建模为封闭目标构成的图,只重建发生变化的部分。

阅读英文原文

概念定义

Bazel 是多语言、多仓库的构建与测试系统,它用声明式的目标图描述构建,每个目标有明确的输入与输出。每个动作都是封闭且在沙箱中执行的,因此相同输入产出相同输出,结果可在本地与远端缓存。Bazel 追踪精确的依赖图,只重建输入发生变化的目標,这使大型单体仓库中的增量构建保持快速。

为什么重要

传统构建工具依据时间戳与目录布局推断依赖,在多语言的大目录树中会失效。隐藏依赖导致错误的增量构建,全量重建变得不可避免且缓慢。Bazel 让依赖显式化,使增量性可靠,正确性不再被速度牺牲。同一模型还支持远端缓存与远端执行,让整个集群共享工作。

工程实践

保持动作封闭并声明每一个输入;未声明的读取或写入会悄悄破坏缓存正确性并可能产生错误结果。以有用的粒度定义目标,使一次变更只让一小部分失效,并给规则精确的输入而非整个目录。尽早在远端缓存上投入,在开发者与 CI 之间共享结果,并把 BUILD 文件当作仓库活的依赖模型,像对待代码一样认真评审。