写点什么

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

评论

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

云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭

阿里巴巴云原生

阿里云 云原生

前端leetcde算法面试套路之回溯

js2030code

JavaScript LeetCode

社招前端react面试题整理

beifeng1996

React

React源码分析2-深入理解fiber

flyzz177

React

React源码解读之更新的创建

flyzz177

React

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

vivo 故障定位平台的探索与实践

vivo互联网技术

根因分析 聚类 K-Means 二阶指数

前端二面经典vue面试题指南

bb_xiaxia1998

Vue

流量路由技术解析

阿里巴巴云原生

阿里云 云原生 流量路由

React源码解读之任务调度

flyzz177

React

22道js输出顺序问题,你能做出几道

loveX001

JavaScript

大厂前端面试考什么?

loveX001

JavaScript

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

2023前端二面常考面试题合集

loveX001

JavaScript

React面试:谈谈虚拟DOM,Diff算法与Key机制

beifeng1996

React

百度前端经典vue面试题整理

bb_xiaxia1998

Vue

对话开发者:Serverless 落地的困境与破局

阿里巴巴云原生

阿里云 Serverless 云原生

Higress & Kruise Rollout: 渐进式交付为应用发布保驾护航

阿里巴巴云原生

阿里云 云原生 Higress

MSE ZooKeeper 数据导入导出功能上线

阿里巴巴云原生

zookeeper 阿里云 云原生

用javascript分类刷leetcode9.位运算(图文视频讲解)

js2030code

JavaScript LeetCode

分布式是大数据处理的万能药?

jiangxl

年终盘点一 | 云原生的 2022 年:降本提效、全面 Serverless 化

阿里巴巴云原生

阿里云 Serverless 云原生

让 Java Agent 在 Dragonwell 上更好用

阿里巴巴云原生

Java 阿里云 云原生

React源码分析3-render阶段(穿插scheduler和reconciler)

flyzz177

React

面试官:说说Event Loop事件循环、微任务、宏任务

loveX001

JavaScript

RocketMQ 多语言 SDK 开源贡献召集令

阿里巴巴云原生

阿里云 RocketMQ 云原生

React源码分析4-深度理解diff算法

flyzz177

React

React源码解读之React Fiber

flyzz177

React

前端高频react面试题整理

beifeng1996

React

恭喜 OpenSergo 获得中国开源云联盟 2022 “优秀开源项目”

阿里巴巴云原生

阿里云 开源 云原生 OpenSergo

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

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