Bazel Vision

报告问题 查看来源 每晚 · 7.2。 · 7.1敬上 · 7.0 · 6.5 条 · 6.4

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

  • 工程师们可以将构建基础视为理所当然。软件开发者 因此可以专注于编写代码的创造性过程, 完成构建和测试流程自定义构建系统时 支持新语言或独特的组织需求,用户则专注于 可扩展性方面,这是其应用场景所独有的方面, 改造了基本的管道。

  • 工程师可以轻松为任何项目做贡献。开发者希望 你可以直接克隆项目并运行 build。无需进行本地配置,一切就是这么简单。包含 可以跨平台远程执行,可以在任何地方的任何机器上运行, 针对项目目标的所有平台全面测试他们的更改。 工程师可以为新项目快速配置 build,也可以按增量方式配置 build 迁移现有 build。

  • 项目可以扩展到任何规模的代码库、任何规模的团队。快速、 增量测试让团队能够在发布前对每项更改进行全面验证 投入。即使代码库不断增长,项目跨多个 并推出了多种语言。基础设施不强制 测试覆盖率以牺牲构建速度。

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

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

这些特性支持安全的增量(仅重新构建更改) 输入不会带来损坏的风险)和可分发性(构建 操作是独立的,可以分流)。通过最大限度地减少工作量, 正确的构建和并行运行,以跨多个核心和远程 Bazel 可以加快任何构建速度。

Bazel 的抽象层,提供针对具体语言、平台和 使用简单的可扩展性语言实现的工具链, 可轻松应用于任何情境。

Bazel 核心能力

  1. Bazel 支持多语言、多平台的构建和测试。您可以 只需运行一条命令即可构建和测试整个源代码树, 定位的语言和平台组合
  2. Bazel 构建既快速又正确。每次构建和测试运行 您的开发者的虚拟机和持续集成。
  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 的 特定生态系统的能力。

大体而言,这些都已足够 为该语言社区的成员提供语言价值。