背景
CI 最容易浪费时间的阶段之一,就是镜像构建。
常见慢点:
- 每次都重新下载依赖
- layer 顺序不合理导致缓存失效
- 多架构构建没有缓存复用
BuildKit 的关键能力
- cache mount
- 并行构建
- 远程缓存导入导出
# syntax=docker/dockerfile:1.7
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod go mod download
COPY . .
RUN --mount=type=cache,target=/root/.cache/go-build \
CGO_ENABLED=0 GOOS=linux go build -o app .
GitHub Actions 示例
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ghcr.io/org/app:latest
cache-from: type=registry,ref=ghcr.io/org/app:buildcache
cache-to: type=registry,ref=ghcr.io/org/app:buildcache,mode=max
总结
提速的核心不是换机器,而是设计好缓存路径。
构建系统越早做缓存治理,团队长期效率越高。
CI 慢不是宿命,很多时候只是缓存没被认真设计。