高级构建系统的兴起

主要观点:2024 年,尽管 DevOps 技术有进步,但软件构建仍存在问题,构建瓶颈在增长,包括长时间构建和不稳定构建等。新一代先进构建系统能提高构建速度和可靠性,解决这些问题,如 Google 的 Bazel、Meta 的 Buck、X 的 Pants 等已开源,一些初创公司也基于类似原则提供解决方案。同时,单仓库的采用增加了构建的复杂性,一些专注于一致性和安全性的工具也在兴起,不过并非所有团队都需要先进构建系统,对于小型团队或模块化代码库的团队,使用免费子工具可能更合适,但先进构建系统的趋势不可阻挡。

关键信息

  • 2024 年软件构建仍存问题,构建时间长且不稳定,如 Graphite 报告显示大团队 P75 总 CI 时间达 130 分钟,CircleCI 生产分支工作流时间增长 11%,约 17%生产分支构建失败。
  • 新一代先进构建系统通过细分构建为小目标、确定性依赖管理和远程执行等功能实现 10 倍构建速度提升和高可重复性构建,如 Bazel、Buck、Pants 等开源系统及 EngFlow、BuildBuddy、Aspect 等初创公司产品。
  • 单仓库采用增加构建复杂性,如 Javascript 社区的 Nx、Turborepo 和 Rushstack 等工具兴起,Vercel 已收购 Turborepo。
  • 一些公司更注重构建一致性和安全性,如 Nix 及其相关生态系统在金融服务和航空航天等领域受欢迎,Bazel 也被合规导向组织采用。
  • 并非所有团队都需要先进构建系统,小型团队或模块化代码库团队可使用免费子工具,如 pnpm 等,但先进构建系统的趋势不可阻挡,其将改变开发工作流程。

重要细节

  • 2024 年 StackOverflow 开发者调查中,开发者将优质开发环境和构建环境列为工作满意度重要因素。
  • 新构建系统通过严格的 BUILD 文件定义目标,仅重建变更的目标以减少构建时间,如 Bazel 和 Buck。
  • Nix 基于纯函数的包管理器提供第三方依赖的强一致性保证,其 NixOS 易于审计和管理操作系统配置。
  • 先进构建系统通过远程执行并行化子目标构建和依赖安装,缓存任务输出以减少计算需求,如 Blacksmith 在高性能机器上运行构建任务。
  • 许多先进构建系统通过现代语法如 Dagger 的编程构建函数和 Earthly 的 Earthfiles 使其易于使用,并提供跨语言支持。
  • 部分先进构建系统学习曲线陡峭,如 Nix 文档稀疏,Bazel 集成需数月,集成到现有代码库可能需要大量重构。
  • 新兴构建系统将使“在我的机器上运行正常”成为过去,通过强制构建密封性和提供高级缓存工具,让开发者可在任何地方快速自信地构建项目,改变开发工作流程,减少构建成本,增加协作。
阅读 20
0 条评论