如何将 CI 构建耗时缩短 80% 以上
如何将 CI 构建耗时缩短 80% 以上
在 Veloera 中,Docker 构建一直是一个挑战,每次发版都要耗费接近 20 分钟,这对于一个快速发展的项目来说显然是不可接受的。然而,通过一些策略的实施,我成功地将 Docker 构建时间缩短到了 3 分钟,实现了 80% 以上的提升。在这篇文章中,我将分享我所采取的策略,并提供实际的代码示例,帮助你也能在你的项目中实现类似的改进。
1. 引入矩阵策略(Matrix strategy)
矩阵策略允许 CI 系统同时为不同的架构构建镜像。通过以下配置,Veloera 的 CI 系统现在可以并行构建 amd64 和 arm64 架构的镜像。
strategy:
matrix:
platform:
- linux/amd64
- linux/arm64这个改变使得 GitHub Actions 为每个平台并行启动独立的 runner,从而避免了顺序编译带来的时间浪费。
2. 使用 GitHub Actions cache 替换本地缓存
将 Docker buildx 的缓存存储在 GitHub Actions 提供的缓存域中,而不是 runner 的本地临时目录,可以避免不同 runner 或 job 重复构建相同的层。以下是相关配置示例。
cache-from: type=gha,scope=build-${{ matrix.platform }}
cache-to: type=gha,mode=max,scope=build-${{ matrix.platform }}3. 添加 merge_manifests 任务
手动合并不同架构的镜像标签是一项繁琐的工作,通过引入自动化的 merge_manifests 任务,我们可以轻松地合并不同架构的镜像为 multi-arch manifest,从而避免重复推送。以下是任务的配置示例。
merge_manifests:
name: Create multi-arch manifest以上就是我在 Veloera 中实施的主要策略。当然,还有其他一些策略的引入,但它们更多是锦上添花。具体的变更可以查看相应的提交记录。
虽然这篇文章相对简短,但它概述了如何通过引入矩阵策略、使用 GitHub Actions 缓存和自动化合并多架构镜像标签来显著减少 CI 构建时间。希望这些信息能帮助你在自己的项目中实现类似的改进。
评论已关闭