Bazel Vision

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

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

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

  • 项目可以扩展到任何大小的代码库,任何规模的团队。通过快速的增量测试,团队可以在提交之前全面验证每项更改。即使代码库不断增长、项目跨越多个代码库并引入多种语言,情况也是如此。基础架构不会迫使开发者为了提高构建速度而牺牲测试覆盖率。

我们相信 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 三明治” 原则。

  4. 规则需要支持远程执行 。实际上,这意味着 可以使用工具链 机制进行配置

  5. 如果存在该语言的广泛使用的 IDE ,规则(和 Bazel)需要与该 IDE 进行交互。

  6. 规则需要有全面、可用的文档 ,包括面向新用户的入门材料,以及面向专家用户的全面文档。

这些项中的每一项都至关重要,只有将它们结合在一起,才能实现 Bazel 在其特定生态系统中的能力。

总的来说,它们也是足够的 - 一旦全部满足,Bazel 就会完全向该语言社区的成员交付其价值。