Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验
![](/theme/default/default/images/main/eye-open.png)
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
![](/theme/default/default/images/main/icon-jing.png)
在构建管道迁移的潮流中,Airbnb 分享了他们弃用 Buck 并迁移到 Bazel 的经验。这一转变旨在为其后端和前端提供一个统一且高效的构建体验。Airbnb 的工程师们主要集中在构建配置和 IDE 集成两个方面的问题上。
由于 Bazel 和 Buck 在目录结构、命令行调用及使用了相同的配置语言 Starlark 方面的相似性,Airbnb 工程师能够相对简化构建配置的迁移。然而,由于两者在规则方面的差异,Airbnb 采用了创建一个包装层(shim layer)的方法来解决问题。他们为每个构建系统定义了规则,并通过 rules_shim 标识符与正确的目录关联起来。这一层特别对于处理 genrule 规则至关重要,它允许在两个构建系统中使用相同的脚本。
此外,为了支持条件配置,Airbnb 工程师实现了一个解决方案,通过移动一个抽象层,并使用 select 重新实现了两个系统都支持的命令行参数。在 IDE 集成方面,他们开发了自己的基于 Bazel 的 Xcode 工作区生成器,用 XcodeGen 替换了原有以 Buck 为中心的解决方案。
重要的是,Airbnb 工程师分三步执行迁移过程,以减少对开发者工作流的干扰。首先,他们将新生成器与现有 Buck 方案集成,确保兼容性。第二步,添加了与 Buck 命令相同的新 Bazel 命令,并允许在两者之间切换。最后,在新系统稳定后,去除对 Buck 的支持。
迁移到 Bazel 后,Airbnb 实现了显著的性能提升,XcodeGen 生成项目时间缩短了60%,Xcode 打开时间缩短了70%以上。此外,新的构建系统还缩短了构建时间,特别是增量构建时间,并为未来优化开辟了空间。
想要了解更多内容?
![](/theme/default/default/images/main/icon-jing.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)
![](https://cdn.easycorp.cn/rongpm/upload/202312/f_39217d624bb2b42ce8f6322ebd7e573a.png)