写点什么

Spotify 采用 Bazel 构建系统,构建时间缩短 75%

  • 2023-10-28
    北京
  • 本文字数:878 字

    阅读完需:约 3 分钟

大小:425.08K时长:02:25
Spotify采用Bazel构建系统,构建时间缩短75%

经过三年的试用,2020 年,Spotify决定采用Bazel作为Spotify iOS应用程序的官方构建系统。按照 Spotify 工程师 Patrick Balestra 的说法,这一切换将他们的构建时间减少了四分之三。

 

对于 Spotify 的 iOS 团队来说,重要的是切换过程不能中断开发或影响发行频率。在采用 Bazel 之前,Spotify 使用基于 YAML 的自定义 Ruby DSL,开发人员可以声明式地添加新模块,包括构建目标的规范、构建它所需的源文件、资源和依赖项。Balestra 说,因为可以重用相同的 DSL 脚本来生成 BUILD.bazel 文件而不是 Xcode.pxbproj 文件,这有助于确保我们无缝地切换到 Bazel。

 

他提到,切换到 Bazel 将构建加测试时间从 80 分钟降低到了 20 分钟。


从耗时最长的配置开始,我们将 CI 配置一个接一个地迁移到 Bazel。其中有一个配置包含超过 800 个测试目标、近 300 万行代码,使用 Xcode 构建花费的时间在 45 分钟以上。迁移到 Bazel 之后不到 10 分钟就可以构建完成。

 

根据 Balestra 的说法,这种改进主要得益于 Bazel 高效的远程缓存以及它对多台机器并行构建的支持。

 

不过,这个过程并不是说直接将构建文件输入到 Bazel 就可以了。相反,它会涉及到一个严谨的过程,即使用BuildBuddy提供的遥测洞察来识别性能问题和瓶颈(BuildBuddy 是一个旨在通过图形用户界面和命令行界面解锁 Bazel 功能的工具)。另外,借助bazel-diff,团队还可以更好地确定每个更改会影响到构建图的哪些部分,这样就可以尽可能地减少针对每个新构建所运行的测试集。

 

为了改善 Xcode 构建(开发人员在本地运行)和 Bazel 构建(在 CI 基础设施中使用)之间的共存,Spotify 采用了rules-xcodeproj。这使得他们可以直接从 Bazel 构建文件生成 Xcode 项目,而不是使用遗留的 Ruby/YAML 构建系统,这样就可以减少在本地构建成功但在 CI 中失败的情况,从而降低维护和故障排除的成本。

 

向 Bazel 迁移的最后一步是定义一个发布策略,在将 Bazel 构建直接部署到员工设备上两周之后,再将其推送给外部 Alpha 和 Beta 测试人员,最后向普通用户发布。

 

Balestra 说,所有这些做完之后,切换就成功了,故障和性能指标也没有显示什么异常。

 

原文链接:

https://www.infoq.com/news/2023/10/spotify-bazel-ios-transition/

2023-10-28 08:006245

评论

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

一个15年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害

汪子熙

后台开发 SAP abap Netweaver 7月月更

用 React 结合 SAP UI5 Web Components 来开发 SAP Fiori 应用

汪子熙

JavaScript 前端开发 SAP SAP UI5 7月月更

React函数组件详解

恒山其若陋兮

7月月更

深浅拷贝

Jason199

js 深拷贝 浅拷贝 7月月更

从源码上学习 MockMvc 的使用

安逸的咸鱼

Java 源码 Mock测试框架 7月月更

QT exe只允许运行单个

小肉球

qt 7月月更

Elephant Swap的LaaS方案迅速崛起,构建全新DeFi2.0协议

鳄鱼视界

Envoy分布式链路追踪

阿泽🧸

envoy 7月月更

【刷题记录】17. 电话号码的字母组合

WangNing

7月月更

数据中台建设误区

奔向架构师

数据中台 7月月更

Docker 安装 Nginx 部署前端项目

宁在春

nginx Docker Vue 7月月更

另类加法与走方格的方案数

未见花闻

7月月更

数据结构-顺序表的实现

芒果酱

数据结构 C语言 7月月更

Prometheus 2.37.0 新特性

耳东@Erdong

release Prometheus 7月月更

附答案 | 最强Python面试题之Python基础题(1)

KEY.L

7月月更

在 SAP 云平台上部署和运行 Docker 应用

汪子熙

Docker Kubernetes 云原生 SAP 7月月更

[ kitex 源码解读 ] Kitex 扩展性设计思路

baiyutang

Go golang 云原生 微服务框架 kitex

Python干货篇——列表及列表常用内置函数

Java学术趴

7月日更

C#入门系列(二十七) -- LINQ简析

陈言必行

7月月更

云原生(十) | Kubernetes篇之Kubernetes简介

Lansonli

云原生 k8s 7月月更

机器学习-集成学习

AIWeker

机器学习 7月月更

超干货!彻底搞懂单工、半双工、全双工的区别与联系

wljslmz

网络技术 7月月更 通信模式 双工

【愚公系列】2022年07月 Java教学课程 06-常量

愚公搬代码

7月月更

zookeeper-运行期间的leader选举与observer

zarmnosaj

7月月更

谈谈程序员如何提高自己的写作能力

宇宙之一粟

写作 7月月更

Spotify采用Bazel构建系统,构建时间缩短75%_Android/iOS_Sergio De Simone_InfoQ精选文章