写点什么

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:005974

评论

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

一种通用的业务监控触发方案设计 | 京东云技术团队

京东科技开发者

京东云 业务监控 企业号 5 月 PK 榜

EhViewer软件2023最新白色版中文语言

ehviewer

EhViewer

基于Sentinel自研组件的系统限流、降级、负载保护最佳实践探索 | 京东云技术团队

京东科技开发者

开源 京东云 企业号 5 月 PK 榜

SpringBoot 使用 Sa-Token 完成注解鉴权功能

Java spring Sa-Token

从前后端的角度分析options预检请求

华为云开发者联盟

前端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

LP流动性质押挖矿系统软件开发

Congge420

打造公用事业行业数智化标杆!泉州水务集团财务共享系统建设项目启动

用友BIP

财务共享

网易云商·七鱼智能客服自适应 ProtoStuff 数据库缓存实践

网易智企

Java 数据库 缓存

消息推送平台有没有保证数据不丢?

即时通讯技术文集(第15期):IM跨平台和社交软件红包技术 [共19篇]

JackJiang

网络编程 即时通信 即时通讯IM

Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

汀丶人工智能

人工智能 深度学习 ChatGPT MidJourney prompt learning

元宇宙链游系统软件开发

Congge420

生态伙伴 | 硬创大赛新起航!携手华强科创广场,助力硬科技创业者

华秋电子

FEELM在英国发布全新升级一次性解决方案,思摩尔打造增长新引擎

科技热闻

基于 KONOS 编写一个部门级的前端框架

鲸品堂

前端 前端框架 企业号 5 月 PK 榜 konos

大央企的“中央厨房”,泰裤辣!

用友BIP

数智化底座

包管理工具:pnpm | 京东云技术团队

京东科技开发者

京东云 pnpm 企业号 5 月 PK 榜

【AI思维空间】ChatGPT纵横编程世界,点亮智慧火花 | 京东云技术团队

京东科技开发者

人工智能 京东云 ChatGPT 企业号 5 月 PK 榜

限速神器RateLimiter源码解析 | 京东云技术团队

京东科技开发者

限流算法 京东云 企业号 5 月 PK 榜

刷Github时发现了一本阿里大神的算法笔记!标星70.5K

Java 数据结构 算法 LeetCode

央国企数字化转型 6 大挑战如何应对?中国信通院 IOMM 方法论提 6 点参考对策

信通院IOMM数字化转型团队

数字化转型 IOMM 央国企数字化转型

机器学习服务语音合成,解锁智能养娃新趋势

HarmonyOS SDK

HMS Core

硬科技,创未来!第十五届深创赛福田预选赛-华秋第九届硬创大赛正式启幕

华秋电子

赋能企业数智转型新动力,迈向票据等分化新时代

用友BIP

IPv6定义以及优势说明-行云管家

行云管家

网络 ipv6

在Mac电脑上运行 PC 游戏

互联网搬砖工作者

浅析AIGC for MMKG

华为云开发者联盟

人工智能 华为云 AIGC 华为云开发者联盟 企业号 5 月 PK 榜

TOB行业头条专访伙伴云CEO戴志康:GPT带来的AIGC热潮,改造了低代码?

联营汇聚

JMeter笔记6 | JMeter录制(配置代理)

测试 Jmeter 性能测试 自动化测试 接口测试

海量主机自动化运维软件用哪款好?具体功能有哪些?

行云管家

主机 云主机 自动化运维

第五届金蝶云・苍穹追光者开发大赛报名正式启动,百万奖金等你拿

金蝶云·苍穹

低代码 低代码平台 开发者大赛 金蝶 金蝶云苍穹

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