内容提要
2022年4月,合并请求(PR)通过持续集成(CI)并合并到主分支的平均时间约为80分钟。现在,我们的CI构建时间已经降至30分钟以下。通过发现最佳机会、实验验证问题并尝试不同的解决方案、逐步提高CI效率和团队合作,我们改进了主代码库中的CI构建时间。主要瓶颈是水平扩展效率低下和步骤过多。通过优化CI实例池、使用Bazel远程构建执行、简化流水线生成和优化测试步骤等措施,我们显著缩短了CI构建时间,提高了开发人员的体验。
关键要点
-
2022年4月,合并请求的平均CI构建时间约为80分钟,现在已降至30分钟以下。
-
通过发现最佳机会、实验验证问题和团队合作,逐步提高CI效率。
-
主要瓶颈是水平扩展效率低和步骤过多。
-
优化CI实例池、使用Bazel远程构建执行、简化流水线生成和优化测试步骤等措施显著缩短了CI构建时间。
-
在2022年上半年,CI构建时间逐渐恶化,7月时合并特性分支的构建时间常常超过1小时。
-
成立CI体验工作组,解决了许多简单问题,如防止Bazel缓存问题和合并流水线步骤。
-
进行流水线审计,以更好地理解步骤并识别改进机会。
-
Bazel的远程构建执行(RBE)被探索以更有效地分配工作负载。
-
CI系统的许多步骤不够高效,导致资源利用不足和构建时间延长。
-
Bazel的启动速度慢,执行开销大,迁移构建和测试困难。
-
通过实验探索CI平台的改进机会,最终实现了更高效的实例池和构建时间。
-
通过使用Bazel的缓存机制,构建时间显著缩短,后端构建时间从10分钟减少到5分钟。
-
前端集成测试和可访问性测试的转换为Bazel,预计将大幅提高效率。
-
在2023年9月成功推出新的前端集成和可访问性测试,显著提高了构建速度和降低了成本。
-
通过去除bazel-diff和bazel查询,流水线生成时间减少到2-3分钟。
-
E2E测试和集成测试的改进显著提高了构建速度,减少了关键路径上的时间。
-
CI的整体改进不仅提升了构建时间,也改善了开发者体验。
延伸问答
Canva 如何缩短持续集成的构建时间?
Canva 通过优化 CI 实例池、使用 Bazel 远程构建执行、简化流水线生成和优化测试步骤等措施,将构建时间从 80 分钟缩短到 30 分钟以下。
在持续集成中,主要的瓶颈是什么?
主要瓶颈是水平扩展效率低和步骤过多,这导致资源利用不足和构建时间延长。
Canva 在 CI 体验方面采取了哪些团队合作措施?
Canva 成立了 CI 体验工作组,汇集不同团队的成员,解决了许多简单问题并进行流水线审计,以识别改进机会。
Bazel 远程构建执行(RBE)对 CI 有什么影响?
Bazel 远程构建执行(RBE)提高了构建和测试的效率,允许将工作负载分配到多个机器上,从而加快了构建速度。
Canva 如何处理 CI 中的缓存问题?
Canva 使用 Bazel 的缓存机制,通过设置远程下载最小化标志,减少了不必要的网络 I/O 和时间,提高了构建效率。
Canva 在 CI 流水线中做了哪些简化?
Canva 通过去除 bazel-diff 和 bazel 查询,简化了流水线生成过程,使生成时间减少到 2-3 分钟。