Bazel Vision

报告问题 查看源代码

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

  • 工程师可以学习构建基础知识,这是理所当然的。软件开发者专注于编写代码的创作过程,因为构建和测试的机械过程已经完成。自定义构建系统以支持新语言或独特的组织需求时,用户可以专注于其用例独有的可扩展性,而无需重设基本的连接过程。

  • 工程师可以轻松为任何项目做贡献。想要开始处理新项目的开发者只需克隆该项目并运行相应 build。您无需进行本地配置,只需配置即可。借助跨平台远程执行功能,他们可以在任何位置使用任何机器,并对照项目的所有平台全面测试其更改。工程师可以快速配置新项目的 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 sandwich”原则。
  4. 规则需要可以远程执行。实际上,这意味着可使用工具链机制进行配置
  5. 规则(和 Bazel)需要与语言的广泛使用的 IDE(如果有)进行交互。
  6. 这些规则需要包含全面且实用的文档,其中包含面向新用户的入门材料和面向专家用户的全面文档。

每一项都至关重要,只有它们共同发挥作用,才能满足 Bazel 针对特定生态系统的能力。

总的来说,它们足够大 - 全部完成后,Bazel 会完全将其价值提供给该语言社区的成员。