任何软件开发者都可以使用易于采用和 扩展的工具,高效地构建、测试和打包 任何项目,无论项目的大小或复杂程度如何。
工程师可以理所当然地掌握构建基础知识。软件开发者 专注于编写代码的创意过程,因为构建和测试的机械 过程已经解决。在自定义构建系统以 支持新语言或独特的组织需求时,用户专注于其用例特有的 可扩展性方面,而无需重新发明基本管道。
工程师可以轻松地为任何项目做出贡献。想要开始处理新项目的开发者只需克隆该项目并运行 构建即可。无需进行本地配置,一切正常运行。借助 跨平台远程执行,他们可以在任何地方的任何机器上工作,并 针对项目面向的所有平台全面测试其更改。 工程师可以快速为新项目配置构建,或逐步 迁移现有构建。
项目可以扩展到任何大小的代码库、任何规模的团队。快速的 增量测试让团队能够在提交之前全面验证每项更改。即使代码库不断增长、项目跨越多个 代码库并引入多种语言,情况也是如此。基础架构不会迫使 开发者牺牲测试覆盖率来换取构建速度。
我们相信 Bazel 有潜力实现这一愿景。
Bazel 从头开始构建,旨在实现可重现的构建(给定的一组输入始终会产生相同的输出)和可移植的构建(构建可以在任何机器上运行,而不会影响输出)。
这些特性支持安全的增量(仅重建更改的 输入不会引入损坏风险)和可分发性(构建 操作是隔离的,可以卸载)。通过最大限度地减少正确构建所需的工作量,并在多个核心和远程 系统上并行执行该工作,Bazel 可以让任何构建都变得快速。
Bazel 的抽象层(以简单的可扩展语言实现特定于语言、平台和 工具链的指令)使其可以 轻松应用于任何上下文。
Bazel 核心能力
- Bazel 支持多语言、多平台 构建和测试。您可以 运行单个命令来构建和测试整个源代码树,无论 您面向哪种语言和平台组合。
- Bazel 构建快速且正确。每次构建和测试运行都是 增量的,无论是在开发者的机器上还是在 CI 上。
- Bazel 提供统一、可扩展的语言 ,用于为任何 语言或平台定义构建。
- Bazel 允许您的构建 进行扩缩 通过连接到远程执行和 缓存服务。
- Bazel 适用于所有主要开发平台 (Linux、MacOS 和 Windows)。
- 我们承认采用 Bazel 需要付出努力,但可以逐步采用 。Bazel 与给定 语言/平台的实际标准工具进行交互。
为语言社区提供服务
软件工程是在语言社区的背景下发展起来的,语言社区通常是指 使用通用工具和实践的自组织人群。
为了对语言社区的成员有用,必须提供高质量的 Bazel 规则,这些规则与该社区的工作流和惯例集成。
Bazel 致力于实现可扩展性和开放性,并支持 任何语言的良好规则集。
良好规则集的要求
- 这些规则需要支持该语言的高效构建和测试,包括代码覆盖率。
- 这些规则需要与该语言的广泛使用的“软件包管理器”进行交互(例如 Java 的 Maven),并支持从其他广泛使用的构建系统进行增量迁移。
- 这些规则需要可扩展且可互操作,遵循 “Bazel 三明治” 原则。
- 这些规则需要支持远程执行。实际上,这意味着 可以使用工具链机制进行配置。
- 如果存在该语言的 广泛使用的 IDE,则这些规则(和 Bazel)需要与该 IDE 进行交互。
- 这些规则需要有全面、可用的文档,其中包含面向新用户的入门 材料,以及面向专家用户的全面文档。
这些项中的每一项都至关重要,只有将它们结合起来,才能实现 Bazel 在其特定生态系统中的 能力。
总的来说,它们也是充分的 - 一旦全部满足,Bazel 就会充分 发挥其对该语言社区成员的价值。