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 就会充分 发挥其对该语言社区成员的价值。