Bazel Vision

借助易于采用和扩展的工具,任何软件开发者都可以高效地构建、测试和打包任何规模或复杂程度的任何项目。

  • 工程师可以把构建基础知识视为理所当然。软件开发者专注于编写代码的创造性流程,因为构建和测试的机械流程已经解决。在自定义构建系统以支持新语言或独特的组织需求时,用户可以专注于其用例所特有的可扩展性方面,而无需重复开发基本的管道。

  • 工程师可以轻松参与任何项目。开发者如果希望开始处理新项目,只需克隆项目并运行构建即可。无需进行本地配置,即可轻松运行。通过跨平台远程执行,他们可以在任何位置的任何机器上执行操作,并针对项目面向的所有平台全面测试其更改。工程师可以为新项目快速配置 build,也可以逐步迁移现有 build。

  • 项目可以扩容到任何规模的代码库,任何规模的团队。借助快速的增量测试,团队可以在每项更改提交之前对其进行全面验证。即使代码库规模不断扩大、项目涵盖多个代码库以及引入了多种语言,也是如此。基础架构不会强制开发者以测试覆盖率换取构建速度。

我们相信 Bazel 有能力实现这一愿景。

Bazel 从零开始构建,以实现可重现的构建(一组给定的输入将始终生成相同的输出)和可移植的构建(构建可以在任何机器上运行,而不会影响输出)。

这些特性支持安全的增量(仅重新构建已更改的输入不会带来损坏的风险)和可分发性(构建操作是隔离开来且可分流的)。Bazel 能够最大限度地减少进行正确构建所需的工作,并跨多个核心和远程系统并行处理这项工作,让任何构建都能快速运行。

Bazel 的抽象层是特定于语言、平台和工具链的指令,以简单的可扩展语言实现,因此可以轻松应用于任何上下文。

Bazel 核心能力

  1. Bazel 支持多语言、多平台构建和测试。无论您以哪种语言和平台组合为目标,只需运行一个命令,即可构建和测试整个源代码树。
  2. Bazel 构建快速且正确。在开发者的机器和 CI 环境中,每次构建和测试运行都是增量的。
  3. Bazel 提供了一种统一、可扩展的语言,以便为任何语言或平台定义 build。
  4. Bazel 可以连接到远程执行和缓存服务,让您的构建能够扩缩
  5. Bazel 支持所有主要开发平台(Linux、MacOS 和 Windows)。
  6. 我们知道采用 Bazel 需要付出努力,但也可以逐步采用。Bazel 可与给定语言/平台的实际标准工具进行交互。

为语言社区提供服务

软件工程在语言社区(通常是使用常用工具和实践的自组织群体)的背景下不断发展。

为便于语言社区的成员使用,必须提供可集成该社区的工作流和惯例的高质量 Bazel 规则。

Bazel 致力于具有可扩展性和开放性,并支持任何语言的良好规则集。

良好规则集的要求

  1. 这些规则需要支持对该语言的高效构建和测试,包括代码覆盖率。
  2. 这些规则需要与该语言的广泛使用的“软件包管理器”交互(例如适用于 Java 的 Maven),并支持从其他广泛使用的构建系统中进行增量迁移。
  3. 这些规则需要可扩展且可互操作,遵循“Bazel 三明治”原则。
  4. 规则需要远程执行准备就绪。实际上,这意味着可以使用工具链机制进行配置
  5. 规则(和 Bazel)需要与该语言的广泛使用的 IDE(如果有)交互。
  6. 这些规则需要包含完整、实用的文档,包括面向新用户的入门资料,以及面向专家用户的全面文档。

每一项都是必不可少的,只有共同作用,才能实现 Bazel 的功能,更好地服务于特定生态系统。

大体而言,它们也已足够:完成所有任务后,Bazel 会将自身的价值完全发挥给该语言社区的成员。