到底什么是“Bazel 生态系统”?

发布: (2025年12月21日 GMT+8 03:42)
5 分钟阅读
原文: Dev.to

Source: Dev.to

Bazel: The build engine at the core

在中心的是 Bazel 本身:一个由 Google 的 Blaze 团队最初开源的开源构建和测试工具。

  • 读取你的 BUILDWORKSPACEMODULE.bazel 文件。
  • 分析依赖关系并创建动作图(action graph)。
  • 只执行必要的步骤,重度使用并行和缓存,以保持构建快速且可复现。

把它想象成整个 monorepo 构建图的“编译器”。

Rules and Starlark: How Bazel understands your world

单独的 Bazel 知道如何调度工作,但它并不知道“构建一个 Java 库”或“构建一个 Docker 镜像”是什么意思。这些知识存在于 rules(规则)中,由 Starlark 语言编写。

你会看到两大类:

  • 内置规则 – 用于 Java、C++、Go、Android、通用 genrule 等。
  • 外部规则集 – 社区和官方仓库,如 rules_pythonrules_gorules_dockerrules_k8s,以及在 Awesome Bazel 中整理的更多规则。

如果你的团队说“我们使用 Bazel”,他们真正的意思是“我们使用 Bazel 加上一套让它了解我们技术栈的规则”。

Toolchains, platforms, and remote builds

现代系统需要为多个平台构建,有时还要将繁重的工作卸载到远程集群。Bazel 生态系统也覆盖了这些需求。

关键组成

  • 平台 & 工具链 – 描述操作系统/CPU 以及要使用的编译器和工具。这使得跨平台编译和多平台构建可以通过单一配置实现。
  • 远程缓存 & 远程执行 – 可选服务,构建动作和输出可以在远程执行并缓存,这样大型团队就不会一次又一次地重复构建相同的内容。

这正是 Bazel 从“另一个构建工具”转变为“规模化构建与测试基础设施”的地方。

Developer tooling: Making Bazel pleasant to use

原始的 Bazel 可能感觉底层。生态系统通过配套工具让使用体验更顺畅。

典型示例

  • Bazelisk 和包装 CLI,用于管理 Bazel 版本并引导工作区。
  • 为 IntelliJ、VS Code、Android Studio 和 Xcode 生成的 IDE 集成,提供代码导航和重构功能,基于 Bazel 构建。
  • 辅助工具如 bazel-diff、项目生成器、CI 集成以及在 Spotify、Atlassian 等公司使用的仓库特定实用工具。

这些工具把 Bazel 从“强大但痛苦”转变为团队可以在整个组织中采用的方案。

Community, examples, and real‑world usage

生态系统的强大取决于其社区。Bazel 开源项目得到了越来越多使用它进行大规模、多语言 monorepo 的公司和 OSS 项目的支持。

  • Awesome Bazel 这样的精选列表收集了规则、工具和示例项目(从 TensorFlow 到 Kubernetes 和 Envoy),帮助你了解他人是如何组织真实的 Bazel 工作区的。
  • 围绕“下一代 Bazel 构建”和远程分析的博客、演讲和培训材料不断涌现,并保持与当今 Bazel 生态系统的兼容,以复用这些丰富的工具。

如果你在评估 Bazel,不要只看核心二进制文件。还要关注你将依赖的规则、开发者每天会使用的工具以及可以学习的社区资源。整个套件才是人们在谈论 Bazel 生态系统时真正指的内容。

Back to Blog

相关文章

阅读更多 »

Dependabot 版本更新现在支持 Bazel

开发者现在可以使用 Dependabot 自动保持其 Bazel 依赖项为最新。对于使用 Bazel——无论是 Bzlmod 还是 WORKSPACE——的项目,Dependabot v...