2025 AI基础设施风向标,不看必后悔!#AI基础设施峰会 了解详情
写点什么

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

评论

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

第九期-模块三

wuli洋

鸿蒙开发实例 | 为什么选择HarmonyOS?

TiAmo

华为 鸿蒙 10月月更

“程”风破浪的开发者|学习力是这个时代的终极竞争力

石云升

学习方法 知行合一 10月月更 “程”风破浪的开发者

数据湖(十二):Spark3.1.2与Iceberg0.12.1整合

Lansonli

数据湖 10月月更

OSPF基础(一):OSPF工作原理以及优点、OSPF的缺点、OSPF配置方法、DR与BDR的选举原理

Python-派大星

10月月更

云服务的智能堪称颠覆,华为云带来多种守护

IT科技苏辞

如何快速解决恶意进程导致CPU飙升问题 | Linux | 运维

Appleex

Linux centos 运维 cpu 服务器

路由基础:三层交换机、单臂路由的特点以及配置特点、DHCP报文类型、DHCP工作原理、在路由器上配置DHCP、在交换机上配置DHCP、配置DNS服务器

Python-派大星

10月月更

【一Go到底】第二十七天---数组注意事项及细节

指剑

Go 10月月更 goalgn

问:React的setState为什么是异步的?

beifeng1996

React

Kafka生产者客户端几种异常Case详解

石臻臻的杂货铺

kafka Kafka实战 10月月更

JavaScript数组常用方法大全

CoderBin

JavaScript 面试 前端 数组 10月月更

假如面试官问你Babel的原理该怎么回答

loveX001

JavaScript

vue项目启动失败,内存不足处理

甜点cc

JavaScript Vue V8 10月月更

前端安全性问题以及防御措施

甜点cc

前端 安全 学习笔记 10月月更

前端一面高频react面试题(持续更新中)

beifeng1996

React

从React源码分析看useEffect

goClient1992

React

String源码分析(一)

知识浅谈

10月月更

面试官:聊聊长连接下的负载均衡

小小怪下士

Java 负载均衡 程序员 TCP

“程”风破浪的开发者|数据包分析思路方法分享

穿过生命散发芬芳

学习方法 数据包分析 10月月更 “程”风破浪的开发者

使用NeuVector开展云原生安全测试

QE_LAB

云原生 安全测试

项目开发全流程梳理

甜点cc

团队管理 技术管理 敏捷研发 10月月更

熬夜整理前端高频面试题(已拿offer)

loveX001

JavaScript

offset新探索:双管齐下,加速大数据量查询

华为云开发者联盟

数据库 后端 华为云 企业号十月 PK 榜

“程”风破浪的开发者|GoFrame 如何优雅的共享变量?

王中阳Go

Go golang 学习方法 10月月更 “程”风破浪的开发者

IP路由基础、路由器静态路由配置方法、自治系统、缺省路由的配置方法、路由选路规则、缺省路由、备份路由、等价路由、三种查询路由表命令

Python-派大星

10月月更

阶段三作业

Johnny

#架构实战营

线性表数据结构和使用数组实现顺序表

石柒

10月月更

老生常谈React的diff算法原理-面试版

beifeng1996

React

ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?

程序员欣宸

Java Docker 10月月更

Tapdata 创始人唐建法:以秒级响应速度,为企业提供实时数据服务 | 阿里云云原生加速器特别报道

阿里巴巴云原生

阿里云 云原生 Tapdata

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