写点什么

Pinterest 工程通过运行时感知分片将 Android CI 构建时间缩短了 36%

作者:Craig Risi

  • 2025-12-23
    北京
  • 本文字数:2173 字

    阅读完需:约 7 分钟

大小:1.06M时长:06:10
Pinterest工程通过运行时感知分片将Android CI构建时间缩短了36%

Pinterest发布了一份技术案例研究,详细介绍了其工程团队如何通过采用运行时感知的测试分片策略并构建内部测试平台,将 Android 端到端(E2E)持续集成(CI)的构建时间缩短了 36%以上。在进行变更之前,Pinterest 的 Android CI 管道因测试套件在第三方平台上按包名拆分,导致最慢的分片阻塞了整个构建,从而导致构建时间缓慢且不可预测。通过创建一个自定义的内部平台并重新组织测试的分发方式,Pinterest 实现了更平衡的执行,显著降低了开发人员的反馈延迟。

 

在他们之前的设置中,Pinterest 依赖于Firebase Test Lab (FTL)并基于包分组进行测试分片,当一些测试运行时间比其他测试长得多时,会导致工作负载不均衡。这不仅延长了总构建时间,还引入了不稳定性和设置开销,从而增加了每次运行的时间。在评估了第三方替代方案后,该团队得出结论,没有哪个方案能够满足其对原生模拟器支持、可靠性和细粒度控制的要求,而不需要自定义的编排层。这一分析导致了 PinTestLab 的开发,这是一个内部测试基础设施,它在 EC2 实例上运行 Android 模拟器,使工程师能够完全控制调度、设置环境和编排运行时。

 

其核心创新涉及一种运行时感知的分片算法,该算法使用存储在 Pinterest 的 Metro 测试管理系统中的历史测试执行数据,按预期持续时间而不是计数对测试进行分组。与简单的轮询或基于包的分片不同,该算法根据预期运行时间对测试进行排序,并将它们分配给分片,从而最小化各分片执行时间的差异。使用这种方法,团队将最快和最慢分片之间的时间差距从数百秒缩短到几十秒,从而实现一致且更快的构建完成。这种转变将最慢的分片运行时间缩短了 55%,并将每次构建的 CI 反馈时间缩短了约 9 分钟。

 

这一改进的关键促成因素是 Pinterest 能够收集和使用每个测试的历史运行时和稳定性数据。运行时感知的方法不是按数量平均分配测试,而是根据过去的性能将测试分配给预期首先完成的分片,保持模拟器资源繁忙和尾部延迟较低。实现涉及轻量级排序和使用最小堆数据结构的贪心赋值,这是调度效率和计算简单性之间的一种折衷。

 

Pinterest 的平台还优先考虑了运维的稳定性:运行时感知的分片逻辑在Buildkite中运行,使用历史数据生成每个分片的计划,但如果 Metro 不可用,则会回退到轮询分发,从而确保即使在基础设施出现故障的情况下也能保证 CI 的可靠性。展望未来,该团队正在探索使用消息队列的按需分片,以获得更大的弹性和更细粒度的测试执行,但他们发现当前的方法能够以最小的复杂度提供强大的性能。

 

这项工作突出了 CI 优化中的两个更广泛的趋势。首先,利用历史经验数据进行工作负载平衡可以在并行测试环境中获得确定性的性能提升。其次,从供应商管理的分片转向内部编排,可以让团队根据自己独特的工作负载特征定制测试执行策略。随着测试套件的规模和复杂性不断增长,Pinterest 的努力为其他面临 CI 等待时间延长的组织提供了一个实用模型,这是现代软件开发中的一个常见挑战。

 

还有其他公司和项目也采用了类似的方法来提高 CI 性能、测试分片和缩短构建时间,通常使用历史数据、并行化或根据工作负载定制的自定义算法。以下是一些其他示例及其关键细节:

 

Dropbox 的工程师改进了他们的 Android 测试管道,使用Affected Module Detector(受 AndroidX 工具的启发)有选择地识别并只运行给定更改中受影响的测试,并通过诸如 Flank/Fladle 等工具进行测试分片。他们还标准化了覆盖率报告,并将设备上的测试转移到 Firebase Test Lab,从而将整个 Android CI 运行时间从 75 分钟左右减少到 25 分钟左右。他们的方法与 Pinterest 的工作精神相似,因为它避免了运行不必要的测试,并应用战略并行来提高 CI 效率。

 

Shopify 的工程团队构建了一个自定义的测试分离器,它使用历史计时数据来平衡测试分片。通过按执行时间排序测试,然后以一种最小化分片差异的方式分配测试,它们极大地减少了慢分片和快分片之间的不平衡,将总 CI 构建时间从大约 45 分钟减少到大约 11 分钟,并且将分片持续时间差异压缩到大约 5%以内。这种模式与 Pinterest 的运行时感知的分片概念非常相似,并展示了历史时间指标如何在深思熟虑的情况下产生巨大的 CI 加速。

 

Square 的内部 CI 工具Kochiku支持自动化分片、智能调度和跨数百个 Android 构建分片的分布式缓存。Square 的方法虽然没有 Pinterest 的案例研究那么详细,但它强调了扩展 CI 分片和调度逻辑到分布式环境的重要性,在这种环境中,成百上千的并行测试工件可以独立执行,减少积压并提高资源利用率。

 

Bitrise这样的平台提供了内置的测试分片和并行化功能,许多应用团队采用这些功能来减少 CI 时间。Bitrise 的用户报告称,使用它的分片和并行执行能力可以减少大约 50%的测试时间,尽管与 Pinterest 等自定义系统相比,它的抽象层次更高。

 

Slack 的工程团队通过有条件地跳过不必要的前端构建并重用预构建资产来优化端到端 CI 管道,这使得构建速度提高了约 50%,并减少了不稳定因素。虽然没有严格的测试分片,但这个例子展示了基于构建上下文的战略性重用和选择性执行是如何对 CI 反馈循环进行重大改进的。

 

这些例子说明,虽然 Pinterest 的运行时感知分片技术以简单和有效而闻名,但它适用于许多工程组织正在采用的更广泛的最佳实践:使用历史执行数据来平衡工作负载,最大化并行性,避免不必要的测试执行,以获得更快、更可靠的持续集成反馈。

 

原文链接:

https://www.infoq.com/news/2025/12/pinterest-ci-build-reduction/

2025-12-23 16:282

评论

发布
暂无评论

华为云GaussDB助力MetaERP构建“收入成本”产品,高效支撑华为多业务

轶天下事

ChatGPT会取代低代码开发平台吗?

力软低代码开发平台

深入剖析Redis性能问题及优化方案

xfgg

redis 优化 6 月 优质更文活动

你说的是哪一种 IDP:内部开发者门户 OR 内部开发者平台?

杨振涛

DevOps 平台工程 内部开发者平台 内部开发者门户 IDP,

软件测试|PC端应用自动化最佳解决方案——Pywinauto

霍格沃兹测试开发学社

国产芯片开发为什么这么难?2023 中国芯片开发者调查报告发布

博文视点Broadview

听说最近AI应用爆了?!来AI Studio玩转大模型应用

飞桨PaddlePaddle

百度飞桨

利用 AWS CodeWhisperer 激发孩子的编程兴趣

汪子熙

人工智能 AI AWS AIGC 代码生成器

ChatGPT与软件架构(2) - 基于Obsidian和GPT实现解决方案架构自动化

俞凡

人工智能 架构 ChatGPT

ChatGPT 之后,B 端产品设计会迎来颠覆式革命吗?| Liga妙谈

LigaAI

交互设计 产品设计与思考 tob产品 ChatGPT 企业号 6 月 PK 榜

使用Leangoo领歌敏捷工具实施多团队规模化敏捷管理

顿顿顿

项目管理 敏捷项目管理 敏捷工具 scrum工具

au音频编辑 Audition 2022 中文激活版

真大的脸盆

Mac Mac 软件 音频编辑 音频处理 编辑音频

inBuilder低代码平台特性推荐系列-第三期

inBuilder低代码平台

音乐人解密:究竟是如何一步一步成为音乐人的?

懒得勤快

ChatGPT与软件架构(3) - 软件架构提示工程

俞凡

人工智能 架构 ChatGPT

区块链代币DAPP通缩燃烧模式系统开发技术方案

I8O28578624

多模块项目使用枚举配置spring-cache缓存

javalover123

Java lombok Enum spring-boot spring-cache

朱珠代言Moto razr40登618手机榜首,小折叠成新摩登主义造风者

科技之家

【零售电商系列】走进电商

小诚信驿站

6 月 优质更文活动

九科信息获评“第一新声”最佳信创企业管理软件,案例入选信创产业研究报告

九科Ninetech

龙蜥社区 5 月度运营大事件回顾

OpenAnolis小助手

开源 总结 生态 龙蜥社区 运营月报

大数据公司数据分析取数流程以及SQL示例

MobTech袤博科技

AI版女网红“半藏森林”上线,服务项目让人意想不到

引迈信息

人工智能 AI 低代码 JNPF

架构实战营模块 1 第 4 课 - 如何做好架构设计

净意

面试官问:kafka为什么如此之快?

JAVA旭阳

kafka

大模型时代下的企业系统架构变革

蔡超

架构 AI 大模型 GPT ChatGPT

软件测试|一步到位教会你Python字典操作(一)

霍格沃兹测试开发学社

ChatGPT热度不减!华为宣布入局,盘古GPT能否大杀四方!

加入高科技仿生人

低代码 数智化 ChatGPT 文心一言 通义千问

ChatGPT与软件架构(4) - 架构师提示工程指南

俞凡

人工智能 架构 ChatGPT

精选一线企业最佳生产实践,《Apache Doris 用户案例集》重磅发布!

SelectDB

数据库 大数据 数据分析 实时数仓 Doris

Pinterest工程通过运行时感知分片将Android CI构建时间缩短了36%_Android/iOS_InfoQ精选文章