写点什么

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

评论

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

.NET Core 服务实现监控可观测性最佳实践

观测云

.net core

SQL优化的这15招,真香!

量贩潮汐·WholesaleTide

数据库 sql

Sentinel源码—ProcessorSlot的执行过程(二)

电子尖叫食人鱼

JavaScript

深入研究:拼多多商品详情API详解

tbapi

拼多多商品详情接口 拼多多API

技术解析:ScaleFlux CSD5000如何用7%OP实现28%级别的企业存储性能

ScaleFlux

鸿蒙动画与交互设计:ArkUI 3D变换与手势事件详解

威哥爱编程

HarmonyOS HarmonyOS NEXT HarmonyOS5.0

雅菲奥朗可观测性Observability认证培训圆满结课,赋能企业可观测性新能力

雅菲奥朗

CAD缺少线型文件会怎么样

极客天地

[方法分析]如何把大批量电话号码存入到手机通讯录,导入华为手机、小米手机、苹果iphone通讯录

一码平川

探索亮数据Web Unlocker API:让谷歌学术网页科研数据 “触手可及”

程序员洲洲

为什么科技巨头纷纷推出编程 Agent?背后是一场关于“生存方式”的重构

Ryan Zheng

利用DevEco Profiler定位性能瓶颈,优化资源占用

威哥爱编程

HarmonyOS HarmonyOS NEXT HarmonyOS5.0

内部im聊天,实现企业安全私密聊天

BeeWorks

即时通讯 IM 私有化部署 企业级应用

Apache IoTDB V2.0.2/V1.3.4 发布|新增表模型权限管理、UDF、嵌套查询功能

Apache IoTDB

从数字化到智能化,百度 SRE 数智免疫系统的演进和实践

Baidu AICLOUD

SRE

通过利益相关者管理提升财务规划的发展可持续性

智达方通

全面预算管理 财务管理 财务转型

RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库

StarRocks

数据库 数据检索 StarRocks ;RAG DeepSeek

IBM发布《2025 年 X-Force 威胁情报指数报告》: 大规模凭证盗窃不断升级,亚太地区首当其冲

财见

TapData × 梦加速计划 | 与 AI 共舞,TapData 携 AI Ready 实时数据平台亮相加速营,企业数据基础设施现代化

tapdata

实时数据平台 MCP协议 AI Ready实时数据平台 CDC数据采集 数据服务化

企业内部即时通讯软件有哪些?这款IM工具值得拥有

BeeWorks

即时通讯 IM 私有化部署

邮件自动回复助手(Rasa/SMTP)实现教程

不在线第一只蜗牛

前端 教程 邮件

Apipost自动化测试实战:用户充值系统API零代码高效测试与CI/CD集成全攻略

数据追梦人

ScaleFlux入选CRN【2025存储百强】榜单

ScaleFlux

NVMeSSD 企业级存储 硬件存储

豆包 1.5 · 深度思考模型上线边缘大模型网关,百万 Tokens 免费领

火山引擎边缘云

深度思考 火山引擎 豆包 边缘智能

第一期人工智能工程师(中级)课程顺利举行,AI精英齐聚一堂!

雅菲奥朗

CAD怎么调用参数阵列下拉菜单?

极客天地

CAD怎么将多段线反转方向

极客天地

Spine 动画教程:皮肤制作

北桥苏

动画制作 Spine

成功案例丨新一代热管理:预测并降低热风险,避免代价高昂的过度设计和组件故障

Altair RapidMiner

仿真 CAE hyperworks Simlab PSIM

秘密任务 3.0:如何通过 JWT 认证确保 WebSockets 安全

数据追梦人

国际知名半导体研究机构SemiAnalysis称:华为云CloudMatrix 384领先英伟达和AMD的产品一代

极客天地

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