Bazel Vision

报告问题 查看源代码 每夜版 · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

  • 工程师可能会理所当然地认为自己掌握了 build 基础知识。软件开发者专注于编写代码的创意过程,因为构建和测试的机械过程已得到解决。在自定义 build 系统以支持新语言或满足独特的组织需求时,用户可以专注于其用例特有的可扩展性方面,而无需重新发明基本管道。

  • 工程师可以轻松为任何项目做出贡献。想要开始处理新项目的开发者只需克隆项目并运行 build。无需进行本地配置,只需直接使用即可。借助跨平台远程执行,他们可以在任何地方的任何机器上工作,并针对项目所面向的所有平台全面测试其更改。工程师可以快速为新项目配置 build,也可以逐步迁移现有 build。

  • 项目可以扩缩为任何规模的代码库和团队。快速的增量测试可让团队在提交每项变更之前对其进行全面验证。即使代码库不断扩大、项目跨越多个代码库,以及引入多种语言,这一情况依然存在。基础架构不会迫使开发者为了提高 build 速度而牺牲测试覆盖率。

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

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

这些特性支持安全的增量构建(仅重建已更改的输入不会引入损坏风险)和可分发性(构建操作是隔离的,可以分流)。通过最大限度地减少正确构建所需的工作,并跨多个核心和远程系统并行执行该工作,Bazel 可以加快任何构建速度。

Bazel 的抽象层(以简单的可扩展语言实现的特定于语言、平台和工具链的指令)使其能够轻松应用于任何上下文。

Bazel 核心能力

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

为语言社区提供服务

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

为了能为语言社区的成员提供帮助,必须提供与该社区的工作流程和惯例相集成的高质量 Bazel 规则。

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

良好规则集的要求

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

这些项目都至关重要,只有将它们结合起来,才能充分发挥 Bazel 在特定生态系统中的能力。

从总体上讲,这些要求也足够充分 - 一旦全部满足,Bazel 就能充分发挥其价值,为相应语言社区的成员提供支持。