如何将 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 构建时间。希望这些信息能帮助你在自己的项目中实现类似的改进。

阅读更多:谈谈我是如何将 CI 构建耗时缩短 80% 以上的 - Tethys Plex

标签: none

评论已关闭