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