写点什么

Airbnb 从 Buck 迁移到 Bazel,大幅改善开发者体验

作者:Sergio De Simone

  • 2024-03-01
    北京
  • 本文字数:1196 字

    阅读完需:约 4 分钟

Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验

随着其他组织将他们的构建管道迁移到 Bazel 之后,Airbnb 也发布了一个详细的说明,分享了他们弃用 Buck 并改善构建时间以及项目生成和加载时间的过程。


正如 Airbnb 的工程师 Qing Yang 和 Andy Bartholomew 所说的,转向 Bazel 是为了提供一种跨平台(包括后端和前端)统一而高效的构建体验。


从他们的 iOS 开发管道开始,Airbnb 的工程师们主要关注两个方面的问题:构建配置和 IDE 集成。


Bazel 和 Buck 有一些相似之处,包括相似的目录结构和命令行调用,最重要的是使用相同的配置语言 Starlark,这在某种程度上简化了构建配置的迁移。


尽管 Buck 和 Bazel 有相似之处,但它们在所提供的规则方面有所不同。


例如,Buck 提供了 apple_library 和 apple_binary 等规则,而 Bazel 根据外部规则集的不同提供了 swift_library 和 apple_framework 等规则。即使在两个系统具有相同名称的规则(例如 genrule)的情况下,用于配置这些规则的语法通常也是不同的。


在 Airbnb 的案例中,解决这个问题的方法是创建一个包装本地和外部规则的薄片(shim)层。为了在过渡阶段同时处理两个薄片,Airbnb 的工程师创建了一个包含两个不同目录rules_shim/buckrules_shim/bazel的存储库,然后为每个构建系统定义了一个规则,将rules_shim标识符与正确的目录关联起来。


rules_shim层也是处理 genrule 的关键。在 Airbnb,genrules 用于生成 iOS 代码库中的样板代码,并且在两个构建系统上有不同的语法。多亏了这个包装层,Airbnb 的工程师可以在两个系统中使用相同的 genrule 脚本。


构建配置所需的最后一个问题是支持条件配置。Buck 提供了一个read_config函数来读取命令行参数,而 Bazel 不支持这个函数,因此 Bazel 和 Buck 之间出现了不匹配。解决方案是向下移动一个抽象层,并通过select重新实现两个系统都支持的命令行参数。


在 IDE 集成方面,Airbnb 工程师的目标是用一个以 Bazel 为中心的解决方案替换他们现有的以 Buck 为中心的解决方案来创建 Xcode 项目,同时又可以使用他们围绕 Buck 开发所使用的工具。为了达到这个目的,他们决定使用 XcodeGen 开发自己的 Xcode 工作区生成器。


最重要的是,他们分三个步骤执行迁移过程,避免对开发人员的工作流造成干扰。第一步,将新的生成器与他们现有的基于 Buck 的解决方案集成,确保一切都按预期工作。在第二阶段,他们添加了新的 Bazel 命令,这些命令与 Buck 中使用的命令相同,并可以在两者之间切换。最后,在新系统看起来足够稳定时,他们移除了对 Buck 的支持。


迁移的最终结果令人印象深刻。与 Buck 生成项目相比,使用 XcodeGen 生成的时间缩短了 60%,Xcode 的打开时间缩短了 70% 以上。


除此之外,新的基于 Bazel 的构建系统缩短了构建时间,特别增量构建时间,并支持进行进一步优化,以改善共享和协作流程。如果你对完整的细节感兴趣,请务必阅读原文。


查看英文原文


https://www.infoq.com/news/2024/02/airbnb-bazel-migration-ios/

2024-03-01 10:005915

评论

发布
暂无评论
发现更多内容

世界知识产权日:XSKY 以更多架构核心专利,推进 SDS 产业创新创造

XSKY星辰天合

星辰天合 世界知识产权日

什么是IPD项目管理模式?聊聊IPD下的产品研发流程

IPD产品研发管理

产品 项目管理 IPD 产品研发

测试开发名企定向培训训练营即将开营,限时优惠进行中,手把手带你快速提升核心竞争力

测吧(北京)科技有限公司

测试

《2023网信自主创新调研报告》正式发布,云起无垠连年参编

云起无垠

国产 Web 组态软件 TopStack V5.0 发布

图扑物联

工业物联网 web组态 轻量化 组态编辑器 工业组态软件

开放签:引领中小微企业步入电子签章普惠时代

开放签开源电子签章

电子合同 电子签章 开放签

量化合约/合约量化系统开发运营版/成熟技术/源码案例

系统开发咨询1357O98O718

游戏发行困境及OgGame云游戏解决方案简述

Ogcloud

游戏 云游戏 云游戏发行 云游戏平台 游戏云化

怎么用云手机来做TikTok矩阵养号?

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 tiktok运营

鸟瞰图技术重塑大屏视觉体验:点量云流创新应用

点量实时云渲染

云渲染 虚拟现实 实时云渲染 大屏展示 鸟瞰图

测试开发名企定向训练营即将启动,限时优惠火热进行中!

霍格沃兹测试开发学社

实战干货|Spark 在袋鼠云数栈的深度探索与实践

袋鼠云数栈

spark Spark 源码 spark SQL 离线开发 大数据计算引擎

金融案例:统一查询方案助力数据治理与分析应用更高效、更安全

袋鼠云数栈

大数据 数据分析 数字化转型 金融 金融解决方案

AI手机,走入小径分岔的花园

脑极体

AI

亚马逊AI选择各种商品的最佳包装方式,节省大量包装材料

算AI

人工智能 深度学习 AI

构建高效的商品计划系统:为品牌增长注入新动力

第七在线

数据统一高效管理 HashData支撑“数智石油”高质量发展

酷克数据HashData

ISO 专家解读 | 什么是 GQL 国际标准图查询语言

悦数图数据库

图数据库

预见预判|AIRIOT智慧交通管理解决方案

AIRIOT

智慧城市交通 智能交通 智慧交通系统

知识图谱算法有哪些

悦数图数据库

腾讯会议天籁实验室两项研究成果获深圳人工智能奖

极客天地

如何制作个性又美观的二维码?自定义Logo、样式,还能一键复用

草料二维码

二维码 二维码生成 草料二维码 二维码美化

初级Go工程师训练营毕业总结

想吃烤肉!

总结 心得体会

Airbnb从Buck 迁移到 Bazel,大幅改善开发者体验_后端_InfoQ精选文章