我们如何让 CI 快 85% —— 内部先行实践实录

Blog
Author:
Incredibuild TeamIncredibuild Team
Published On:
10月 30, 2025
Estimated reading time:
1 minute

目录

黄金法则:快速的 CI 反馈循环,提高开发者满意度

Incredibuild,我们打造加速软件开发的工具,因此我们对自己要求最高标准。这就是 “Dogfooding” 原则——用我们自己的工具完成最繁重的项目。

我们的工程团队为核心产品运行密集的 CI 流水线,包括 Linux 代理和构建缓存。每个流水线都涉及使用 C++ 编译和使用 Clang-Tidy 进行静态分析。这些关键工作每天运行数百次。

我们有一个明确的目标:通过让 CI 流程更快更便宜,大幅提升内部开发者体验(DX)。

挑战:静态分析耗时,成本高昂

我们的 CI 系统被长时间的建造和高昂的成本所困住。基线使用专门且持续的 CI 运行器,依赖本地缓存策略 ,要求运行器全天候保持活跃,×保持缓存温存。这迫使我们为空闲计算支付固定且高昂的成本。

此外,我们的流水线涉及两个主要的并行作业 —— C++编译 (已通过我们的 Incredibuild for C++加速)和深度 Clang-Tidy linting。即使同时运行,Clang-Tidy 也成为关键路径,整体关卡时长高达每轮 24 分钟,严重阻碍了开发者的速度

创新:为 Clang-Tidy 和短暂计算构建缓存

我们没有简单地重新配置我们的管道,而是用自己的技术来解决问题。我们的分析显示,虽然 C++编译受益于我们现有的分布式工具和缓存机制,但密集的 Clang-Tidy 线条化是关键瓶颈,即使并行运行。

这一认识促使我们投资于一项新能力,并立即在自己身上进行了测试:

定制我们的构建缓存以支持 Clang-Tidy

Clang-Tidy 会检查每一个文件,甚至是未更改的文件,导致构建时间过长。我们的构建缓存从一开始就设计为高度可扩展性,便于适应新的使用场景。我们决定利用这一基础,直接支持 Clang-Tidy

  • 突破: 通过启用 Clang-Tidy 的构建缓存,我们可以缓存 linting 结果本身。这一切都通过我们的仪器化技术自动完成:如果源文件、命令参数和环境变量等输入没有变化,昂贵的 linting 步骤将完全跳过,任务的伪影会立即从缓存中带出。
  • Dogfooding 成功: 我们在数百次每日 CI 运行中严格测试了这一功能,验证了其稳定性和性能,然后才向公众发布。

迁移到远程共享缓存

通过我们的新建缓存功能解决了 Clang-Tidy 瓶颈,我们终于可以解决底层基础设施的成本问题。我们将基础设施战略从浪费的分布式缓存模式转变为精简、集中式的模式:

  • 零废弃计算: 我们淘汰了昂贵的 24×7 专用跑车车队。
  • 新宝藏中心: 我们将缓存可用性整合到一个只有 100GB EBS 存储的远程共享缓存上。它作为中央、持久的远程缓存服务。
  • 临时代理: 我们所有实际的构建工作现在都由廉价且短暂的 EC2 实例执行。这些代理启动后,连接到集中式的远程缓存,运行加速后的 C++ Clang-Tidy 作业,然后立即被拆除 。

结果是:快速构建、低成本和满意的开发者

这次基础设施变革为我们的预算和工程团队带来了巨大收益。

CI 管道削减 85%

总成本降低:~80%

我们的成本节约来自两个不同的来源

  • 基础设施节省(减少 85%):从昂贵的 24 小时运行×转向由集中远程缓存支持的临时代理。
  • 节省时间(80%减少): 我们的 Clang-Tidy 构建缓存能在数百个每日工作中节省 24 分钟中的 20 分钟,让开发者专注于工程任务,而非等待 CI。

总结

我们致力于将工程师最宝贵的财富——时间还给他们。 通过用自己的技术解决难题,我们确保开发过程尽可能高效、愉快。

想像我们一样大幅缩短 CI 的时间和成本吗?我们的 Incredibuild Build Cache 高度可扩展——就像我们的 Clang-Tidy 解决方案一样,它能处理 LinuxWindows AOSP 构建加速,以及压缩、编码、代码签名、打包等任务。你可以试试我们内部使用的同样技术!

试试 Incredibuild 构建缓存 → https://www.incredibuild.cn/product/build-cache

David Mark, Incredibuild 平台工程与创新副总裁