Bazel Vision

报告问题 查看源代码

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

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

  • 工程师可以轻松为任何项目做贡献。想要开始创建新项目的开发者只需克隆项目并运行 build 即可。无需进行本地配置,一切就是这么简单。通过跨平台远程执行,他们可以在任何地方的任何机器上工作,并针对项目目标的所有平台全面测试他们的更改。工程师可以为新项目快速配置 build,也可以逐步迁移现有 build。

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

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

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

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

借助 Bazel 的抽象层(专门针对以简单的可扩展语言实现的语言、平台和工具链的说明),可以轻松地将其应用于任何上下文。

Bazel 核心能力

  1. Bazel 支持多语言、多平台的构建和测试。无论您的目标语言和平台组合是什么,您都可以运行一个命令来构建和测试整个源代码树。
  2. Bazel 构建既快速又正确。在开发者的机器和 CI 上,每次构建和测试运行都是增量的。
  3. Bazel 提供了一种统一的可扩展语言,可以为任何语言或平台定义构建。
  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 便会充分向其语言社区成员提供其价值。