为何选择 Bazel?

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 产品。探索扩展程序,例如我们开源软件代码库中的编程语言支持。