什么是开源构建工具Bazel?


Bazel是由 Google 开发的开源构建工具,用于自动化大型软件的构建过程。其他公司如Pinterest的,Adobe公司,SpaceX公司,英伟达和LinkedIn都使用它。
Bazel与其他构建工具(如MakeMavenGradle )的工作方式相同。但是,与其他特定于框架的工具不同,Bazel 是为具有多语言依赖项的项目量身定制的。
例如,你可以有一个 Rust 或 Go 服务器、一个 Flutter 上的移动客户端和一个 Angular 上的 Web 客户端。在这种情况下,如果您要手动编写自己的构建文件来迎合每种语言的生态系统,这可能是一项艰巨的任务。幸运的是,Bazel 为您完成了所有繁重的工作。
Bazel 最吸引人的功能之一是您可以轻松地将其与项目的CI/CD挂钩。这有助于您提高团队的生产力,因为您可以生成更可靠的构建来定期和严格地测试您的软件。因此,您还可以轻松地发布和发布更强大的构建版本。
然而,Bazel 不仅仅是处理多语言依赖项。让我们探索一些使其如此强大的好处。
以下是使 Bazel 成为出色构建工具的主要优势:

  • 再现性:

Bazel 生成纯函数式构建,其中您的输出文件严格依赖于您的输入。这为您的构建提供了两个重要特征。首先,您的构建是封闭的,这意味着您的构建步骤只能读取您明确提及的输入。其次,您的构建是幂等的,或者换句话说,是可重现的。如果您使用一组恒定的输入,Bazel 将每次生成相同的构建。可重现的构建使调试构建操作更加方便。
  • 与 Docker 和 Kubernetes 的集成:

由于其多功能性,Bazel 补充了 Docker 和 Kubernetes 等现代平台和系统。例如,您可以为您的 monorepo 使用一个方便的 Docker 容器,其中包含一个 Web 客户端和一组微服务。然后,您可以使用它来启动一个类似于您的生产环境的测试环境。因此,您将能够通过您的容器测试您的 Bazel 构建。此外,您可以使用 AWS Fargate 或 Kubernetes 等编排引擎启用增量构建和管理部署
  • 可扩展性:

Bazel 的发明源于 Google 的内部构建工具之一 Blaze。在 Google 内部,Bazel 处理包含超过 10万个源文件的项目的构建。换句话说,Bazel 非常适合具有庞大代码库的大型项目。虽然它提倡 monorepo 模式,但它同样可以轻松处理微服务架构。Dropbox 使用 Bazel扩展其CI/CD 管道,以减少在提交时执行的测试数量。优步还采用了 Bazel 来扩展他们的 Go monorepo。他们利用 Bazel 的密封构建来支持支持其分布式基础架构的增量构建生成。
  • 声明式编程:

为项目编写构建配置应该尽可能简单。Bazel 是使用Starlark构建的,Starlark是一种源自 Python 的高级语言。因此,它为开发人员提供了一种更方便的方式来编写易于阅读的构建配置和属性。此外,Bazel 中的抽象使开发人员免于处理诸如编译器和链接器之类的复杂问题。
  • 并行和缓存:

大规模构建工具必须具有高性能。Bazel 使用缓存机制加速您的构建。它会智能地将您的后续构建与之前缓存的构建进行比较,并且仅构建开发人员更新的那些文件。这可确保 Bazel 仅将您的 CPU 资源用于构建需要重新构建的项目部分。Bazel 还允许您以并行方式生成并发构建,以节省跨分布式代码库的时间。您可以在单台机器上以及远程跨多台机器生成并行构建。
  • 庞大且不断增长的开源社区:

Bazel 的第一个版本大约在两年前的 2019 年发布。从那时起,谷歌在两年内推出了100 多个版本,以期不断为开发人员改进工具。Bazel 的Github 存储库拥有 17.4k 颗星,并且在 Stack Overflow 上有超过2K 的标记问题和超过6K 的搜索结果。这些小而不断增长的数字表明它正在社区中迅速获得牵引力。