Bazel 是一款快速、正确且可扩展的构建工具,具有集成式测试功能,可在行业领先的生态系统中支持多种语言、代码库和平台。
Bazel 速度很快
Bazel 确切知道每个 build 命令需要哪些输入文件,因此仅当每次 build 之间的输入文件集发生变化时才重新运行,从而避免不必要的工作。 它会尽可能并行地运行构建命令,无论是在同一台计算机上还是在远程构建节点上。如果构建结构允许,它可以同时运行数千个构建或测试命令。
这由多个缓存层支持,包括内存、磁盘和远程 build farm(如果可用)。在 Google,我们通常能实现超过 99% 的缓存命中率。
Bazel 正确
Bazel 可确保您的二进制文件仅通过您自己的源代码构建。Bazel 操作在各自的沙盒中运行,并且 Bazel 会跟踪 build 的每个输入文件,仅在需要时重新运行 build 命令。这样可确保您的二进制文件始终处于最新状态,从而确保相同的源代码始终生成相同的二进制文件(逐位相同)。
告别无休止的 make clean
调用,告别追逐实际上已在从未构建的源代码中得到解决的虚假 bug。
Bazel 具有可扩展性
通过编写自己的规则和宏,您可以根据各种项目的具体需求自定义 Bazel,从而充分发挥 Bazel 的强大功能。
Bazel 规则使用 Starlark 编写,这是我们内部的编程语言,属于 Python 的子集。Starlark 使大多数开发者都能轻松编写规则,同时还能创建可在整个生态系统中使用的规则。
集成测试
Bazel 的集成测试运行程序只知道并运行需要重新运行的测试,并使用远程执行(如果可用)来并行运行这些测试。使用远程执行功能快速运行数千次测试,以便尽早检测出不稳定测试。
Bazel 提供相应功能,可将测试结果上传到中央位置,从而有助于高效传达测试结果(无论是在 CI 上还是由单个开发者进行测试)。
多语言支持
Bazel 支持许多常见的编程语言,包括 C++、Java、Kotlin、Python、Go 和 Rust。您可以在同一 Bazel 调用中构建多个二进制文件(例如,后端、Web 界面和移动应用),而不会受到一种语言的惯用构建工具的限制。
多代码库支持
Bazel 可以从多个位置收集源代码:您无需提供依赖项(但可以这样做!),只需将 Bazel 指向源代码或预构建制品(例如 Git 代码库或 Maven Central)的位置,其余工作由 Bazel 完成。
多平台支持
Bazel 可以同时为多个平台(包括 Linux、macOS、Windows 和 Android)构建项目。它还提供强大的交叉编译功能,可在运行构建的平台之外的平台构建代码。
广泛的生态系统
行业领导者非常喜欢 Bazel,因此打造了一个庞大的开发者社区,这些开发者使用 Bazel 并为 Bazel 做出贡献。查找工具、服务和文档,包括 Bazel 可使用的咨询和 SaaS 产品。探索扩展程序,例如我们开源软件代码库中的编程语言支持。