Canva 的更快持续集成构建

Canva 的更快持续集成构建

💡 原文英文,约6300词,阅读约需23分钟。
📝

内容提要

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的整体改进不仅提升了构建时间,也改善了开发者体验。
➡️

继续阅读