写点什么

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

评论

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

性能监控系统的价值:提升系统稳定性与用户体验

测吧(北京)科技有限公司

测试

JMeter 实时压测结果收集:高效监控与分析

测吧(北京)科技有限公司

测试

经典排序算法:冒泡排序与选择排序

测吧(北京)科技有限公司

测试

HarmonyOS 5.0应用开发——全局广播的使用

高心星

广播 ArkTS HarmonyOS NEXT 进程间通信

追觅科技DREAME应用鸿蒙版上架,引领智能清洁行业新风尚

最新动态

公链技术开发之路:从概念到实现的全攻略

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

性能分析:系统级别指标(IO、CPU、内存、网络)的监控与优化

测吧(北京)科技有限公司

测试

Web Service 加压实战:如何有效进行性能测试

测吧(北京)科技有限公司

测试

LIFO 后进先出、函数调用的堆与栈的区别

测吧(北京)科技有限公司

测试

搭建服务端性能监控系统 Prometheus:从零开始的实践指南

测吧(北京)科技有限公司

测试

东风财务信创存储改造:开启数据新纪元,领航金融新征程

XSKY星辰天合

为什么现在Java初中级面试也要问高并发相关问题?

开心学Java

面试 Java并发 高并发 架构师 八股文

精通 JMeter 监听器与测试结果:高效收集与分析性能数据

测吧(北京)科技有限公司

测试

基本性能监控系统使用:确保系统健康运行

测吧(北京)科技有限公司

测试

互联网大厂 Java 500 道核心面试题全解析

采菊东篱下

编程 程序员 java面试

元通汽车:顺国企改革之势,创财务共享新篇

用友智能财务

财务 企业数智化

《ERP vs. HAP》白皮书正式发布

明道云

Prometheus 监控系统部署应用实战:从零到一

测吧(北京)科技有限公司

测试

解放军总医院医学创新研究部刘晓莉:数据实战Datathon活动的价值意义及多学科如何一起开展

ModelWhale

Python 人工智能 大数据 医疗 datathon

【C++】类的继承的深入探讨

EquatorCoco

掌握 JMeter 虚拟用户管理:高效模拟负载并优化性能测试

测吧(北京)科技有限公司

测试

SD-WAN对MPLS和网络安全的重要意义

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SD-WAN国际专线

婚恋服务平台(源码+文档+部署+讲解)

深圳亥时科技

Python实现火柴人的设计与实现

快乐非自愿限量之名

Python

JMeter 变量与引用:提升性能测试的灵活性

测吧(北京)科技有限公司

测试

掌握 JMeter 常用组件:深入了解性能测试的利器

测吧(北京)科技有限公司

测试

Demo发布 | ClkLog成功集成Unity3D

ClkLog

uni-app 开源 sdk React Native Unity3D

2024最全 Java 高频面试合集,掌握这些你也能进大厂!

架构师之道

编程 程序员 java面试

JMeter 后置处理器:提升测试脚本的灵活性与可扩展性

测吧(北京)科技有限公司

测试

阿里工作10年,我总结出了这套Spring全家桶全彩核心笔记

开心学Java

spring 架构师 springboot SpringCloud java面试

精通 JMeter HTTP 请求属性设置:模拟真实用户的 HTTP 请求

测吧(北京)科技有限公司

测试

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