perf(ci): P2-5 Docker build registry缓存共享 - 12个runner共用缓存 #656

Merged
auto-approve-bot merged 1 commits from p2-5-docker-registry-cache into develop 2026-07-20 21:10:17 +08:00
Owner

问题

当前Docker build缓存只有local cache(每个runner本地一份),没有写回registry。

12个runner各自独立缓存,轮流转的话命中率只有 1/12 ≈ 8%,大部分时候都是冷构建。

优化

docker_build_push.sh 中增加 --cache-to type=registry,ref=${CACHE_REF},mode=max

  • 读缓存:local → registry 两级(已有)
  • 写缓存:local + registry 双写(新增)

所有runner共享同一份registry缓存,命中率从 ~8% → 接近100%

预期收益

  • Worker镜像构建:~10min → ~4-6min(减少40-60%)
  • build-staging阶段总耗时:~10min → ~5-6min
  • PR场景CI总耗时进一步缩短

改动文件

  • scripts/ci/docker_build_push.sh:两处build命令都加了registry cache-to
## 问题 当前Docker build缓存只有local cache(每个runner本地一份),没有写回registry。 12个runner各自独立缓存,轮流转的话命中率只有 1/12 ≈ 8%,大部分时候都是冷构建。 ## 优化 在 `docker_build_push.sh` 中增加 `--cache-to type=registry,ref=${CACHE_REF},mode=max` - **读缓存**:local → registry 两级(已有) - **写缓存**:local + registry 双写(新增) 所有runner共享同一份registry缓存,命中率从 ~8% → 接近100% ## 预期收益 - Worker镜像构建:~10min → ~4-6min(减少40-60%) - build-staging阶段总耗时:~10min → ~5-6min - PR场景CI总耗时进一步缩短 ## 改动文件 - `scripts/ci/docker_build_push.sh`:两处build命令都加了registry cache-to
xiaoxia added 1 commit 2026-07-20 21:01:31 +08:00
perf(ci): Docker build增加registry缓存写回,12个runner共享缓存
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 7s
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m39s
AI Code Review / AI Code Review (pull_request) Successful in 2m16s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 3m40s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 7m33s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m40s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m44s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 17s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 9m15s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m33s
ff78b58aa5
当前只有local cache,12个runner各自独立缓存,命中率仅~8%
加上--cache-to type=registry后,所有runner共享同一份registry缓存
缓存命中率从8% → 接近100%,预计构建耗时减少30-50%

🚀 预览环境已部署

项目 详情
PR号 #656
预览链接 https://pr-656.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #656 | | 预览链接 | [https://pr-656.preview.xiaoxiajianji.com](https://pr-656.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
Collaborator

📊 审查概览

  • 整体评价:有建议
  • 严重问题数量:0 个
  • 一般建议数量:1 个

需修改的问题(严重)

💡 改进建议(一般)

  1. [scripts/ci/docker_build_push.sh: 53, 87] 缓存引用唯一性风险
    • 具体内容:代码新增了 --cache-to "type=registry,ref=${CACHE_REF},mode=max" 用于回写缓存。如果 ${CACHE_REF} 是一个固定的值(例如 myrepo/cache:latest),在并发构建或多分支构建场景下,不同的构建任务可能会互相覆盖缓存,导致缓存命中不稳定或构建污染。
    • 修改建议:请确保 ${CACHE_REF} 包含了唯一标识(如 Git 分支名、Commit Hash 或 PR 编号),以隔离不同构建上下文的缓存。例如:"type=registry,ref=${CACHE_REF}:${BRANCH_NAME},mode=max"

良好实践

  • 开启 Registry 缓存回写(--cache-to type=registry)是极佳的 CI/CD 优化实践,能显著加速后续构建过程。
  • 使用 mode=max 可以最大化缓存层,提高缓存命中率。
  • 同时保留 localregistry 缓存策略,兼顾了本地调试和 CI 远程构建的需求。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 21:03:47 | 模型:

### 📊 审查概览 - 整体评价:有建议 - 严重问题数量:0 个 - 一般建议数量:1 个 ### ❌ 需修改的问题(严重) 无 ### 💡 改进建议(一般) 1. **[scripts/ci/docker_build_push.sh: 53, 87] 缓存引用唯一性风险** - 具体内容:代码新增了 `--cache-to "type=registry,ref=${CACHE_REF},mode=max"` 用于回写缓存。如果 `${CACHE_REF}` 是一个固定的值(例如 `myrepo/cache:latest`),在并发构建或多分支构建场景下,不同的构建任务可能会互相覆盖缓存,导致缓存命中不稳定或构建污染。 - 修改建议:请确保 `${CACHE_REF}` 包含了唯一标识(如 Git 分支名、Commit Hash 或 PR 编号),以隔离不同构建上下文的缓存。例如:`"type=registry,ref=${CACHE_REF}:${BRANCH_NAME},mode=max"`。 ### ✅ 良好实践 - 开启 Registry 缓存回写(`--cache-to type=registry`)是极佳的 CI/CD 优化实践,能显著加速后续构建过程。 - 使用 `mode=max` 可以最大化缓存层,提高缓存命中率。 - 同时保留 `local` 和 `registry` 缓存策略,兼顾了本地调试和 CI 远程构建的需求。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 21:03:47 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-20 21:09:12 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-20 21:09:13 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit d4fdebd1e5 into develop 2026-07-20 21:10:17 +08:00
auto-approve-bot deleted branch p2-5-docker-registry-cache 2026-07-20 21:10:17 +08:00

🗑️ 预览环境已清理

PR #656 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #656 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.