ci: Worker镜像分层缓存优化,基础镜像预构建预计节省70%构建时间 #693

Merged
xiaoxia merged 10 commits from ci/worker-layered-cache into develop 2026-07-22 09:08:45 +08:00
Owner

背景

Worker Build 是CI最大瓶颈(~23分钟,占全链路53%),主要耗时在:

  • 编译工具安装(gcc/g++/python3-dev)
  • 大包依赖安装(numpy/scipy/opencv)
  • 依赖瘦身(strip .so文件)

这些依赖变化极少,但每次构建都要重新来一遍。

方案:基础镜像预构建 + 业务镜像分层

新增文件

  • infra/docker/worker-base-builder.Dockerfile:Builder基础镜像(编译工具 + base依赖 + worker大包 + 预瘦身)
  • infra/docker/worker-base-runtime.Dockerfile:Runtime基础镜像(ffmpeg + libglib2.0-0)
  • .gitea/workflows/worker-base-image.yml:基础镜像自动构建workflow(依赖文件变更时触发)

修改文件

  • infra/docker/worker.Dockerfile:从预构建的基础镜像开始,只叠加业务依赖和代码

预期收益

场景 当前 优化后 节省
依赖不变(绝大多数情况) ~23min ~5-7min 70-75%
依赖变化(基础包升级) ~23min ~23min(基础镜像重建+业务构建) 0%

合并注意事项

⚠️ 合并前需要先手动构建一次基础镜像,否则Worker构建会因为找不到基础镜像而失败:

  1. 合并本PR后,前往 Actions → Worker Base Image Build
  2. 手动触发一次 build(针对 develop 分支)
  3. 等待基础镜像构建并推送成功
  4. 之后正常开发的Worker构建就会快很多

缓存策略

  • 基础镜像也有 buildx registry 缓存,依赖不变时重构建也很快
  • 基础镜像用 :latest 标签,业务镜像始终拉取最新稳定版
  • 基础镜像变更频率极低(依赖升级才会触发)
## 背景 Worker Build 是CI最大瓶颈(~23分钟,占全链路53%),主要耗时在: - 编译工具安装(gcc/g++/python3-dev) - 大包依赖安装(numpy/scipy/opencv) - 依赖瘦身(strip .so文件) 这些依赖变化极少,但每次构建都要重新来一遍。 ## 方案:基础镜像预构建 + 业务镜像分层 ### 新增文件 - `infra/docker/worker-base-builder.Dockerfile`:Builder基础镜像(编译工具 + base依赖 + worker大包 + 预瘦身) - `infra/docker/worker-base-runtime.Dockerfile`:Runtime基础镜像(ffmpeg + libglib2.0-0) - `.gitea/workflows/worker-base-image.yml`:基础镜像自动构建workflow(依赖文件变更时触发) ### 修改文件 - `infra/docker/worker.Dockerfile`:从预构建的基础镜像开始,只叠加业务依赖和代码 ## 预期收益 | 场景 | 当前 | 优化后 | 节省 | |------|------|--------|------| | 依赖不变(绝大多数情况) | ~23min | ~5-7min | 70-75% | | 依赖变化(基础包升级) | ~23min | ~23min(基础镜像重建+业务构建) | 0% | ## 合并注意事项 ⚠️ **合并前需要先手动构建一次基础镜像**,否则Worker构建会因为找不到基础镜像而失败: 1. 合并本PR后,前往 Actions → Worker Base Image Build 2. 手动触发一次 build(针对 develop 分支) 3. 等待基础镜像构建并推送成功 4. 之后正常开发的Worker构建就会快很多 ## 缓存策略 - 基础镜像也有 buildx registry 缓存,依赖不变时重构建也很快 - 基础镜像用 `:latest` 标签,业务镜像始终拉取最新稳定版 - 基础镜像变更频率极低(依赖升级才会触发)
xiaoxia added 4 commits 2026-07-22 01:04:29 +08:00
ci: add worker base image auto-build workflow
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 / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker 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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 30s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 59s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m27s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 1m59s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m43s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m44s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 5m54s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m56s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m40s
AI Code Review / AI Code Review (pull_request) Successful in 7m37s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m14s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 10m26s
c9ca2b060e

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #693 | | 预览链接 | [https://pr-693.preview.xiaoxiajianji.com](https://pr-693.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-07-22 01:09:14 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-07-22 08:07:59 +08:00
fix: cache tag斜杠替换为短横线,修复invalid reference format
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 / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 55s
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 / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m0s
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m14s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 1m23s
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m23s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 57s
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
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m11s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m29s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m21s
AI Code Review / AI Code Review (pull_request) Successful in 5m1s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 7m38s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m32s
3c4af08227
xiaoxia added 1 commit 2026-07-22 08:17:50 +08:00
fix: PR Build Worker增加基础镜像fallback,冷启动时本地预构建
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m14s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 2m45s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 9m3s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 36s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 49s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 52s
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 8m16s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m10s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 23m2s
0f2b1be121
xiaoxia added 1 commit 2026-07-22 08:39:10 +08:00
fix: fallback基础镜像改用Gitea Packages地址并push,解决buildx拉不到的问题
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 35s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 20s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 1m36s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m1s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 48s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 59s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 1m41s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m17s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m52s
AI Code Review / AI Code Review (pull_request) Successful in 4m46s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m44s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 8m30s
aefd944a3d
xiaoxia added 1 commit 2026-07-22 08:48:21 +08:00
fix: fallback基础镜像改本地构建+普通docker build模式,绕过registry问题
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Successful in 55s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m3s
841b3b3695
xiaoxia added 1 commit 2026-07-22 08:49:14 +08:00
fix: Worker fallback模式用普通docker build绕过buildx基础镜像问题
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Successful in 53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 54s
435787e14e
xiaoxia added 1 commit 2026-07-22 08:49:47 +08:00
fix: Worker fallback模式用普通docker build绕过buildx基础镜像问题
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 24s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m5s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 44s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m0s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m2s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m48s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m40s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m49s
AI Code Review / AI Code Review (pull_request) Successful in 9m37s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m29s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 23m45s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 38m28s
4e162791ab
Collaborator

代码审查结果 - PR #693

⚠️ 问题(2个需要修改)

  1. .gitea/workflows/ci-pipeline.yml 第524行:Shell脚本中未加引号的变量遍历存在分词风险。

    • 问题描述:代码 for arg in $EXTRA_BUILD_ARGSshell: sh 环境下,如果 EXTRA_BUILD_ARGS 中的某个参数值包含空格(例如 MY_VAR="some value"),Shell 会对空格进行分词,导致参数被错误拆分,构建参数传递错误。
    • 后果:构建参数包含空格时会导致 Docker 构建失败或参数值被截断。
  2. .gitea/workflows/ci-pipeline.yml 第482行docker pull 错误输出被完全屏蔽,可能掩盖权限问题。

    • 问题描述:docker pull ... 2>/dev/null 将所有错误输出(包括 denied 权限错误和 manifest unknown 镜像不存在错误)都屏蔽了。如果是因为权限不足导致拉取失败,脚本会错误地进入 "本地构建" 分支,而本地构建往往也需要拉取基础镜像,最终导致构建失败且难以排查原因。
    • 后果:在配置错误或权限不足时,CI 行为不符合预期(尝试不必要的本地构建),增加排错难度。

💡 建议(1个可选)

  1. .gitea/workflows/worker-base-image.yml 第42行:建议在 Docker 登录重试循环结束后增加显式状态检查。
    • 具体内容:当前的登录逻辑在循环结束后没有检查最终是否登录成功。虽然后续的 docker buildxdocker push 会因未登录而失败,但提前检查并报错能让错误信息更清晰。建议在循环后增加 docker info > /dev/null 2>&1 || { echo "Login failed after retries"; exit 1; }

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 09:06:22 | 模型:

## 代码审查结果 - PR #693 ### ⚠️ 问题(2个需要修改) 1. **.gitea/workflows/ci-pipeline.yml 第524行**:Shell脚本中未加引号的变量遍历存在分词风险。 - 问题描述:代码 `for arg in $EXTRA_BUILD_ARGS` 在 `shell: sh` 环境下,如果 `EXTRA_BUILD_ARGS` 中的某个参数值包含空格(例如 `MY_VAR="some value"`),Shell 会对空格进行分词,导致参数被错误拆分,构建参数传递错误。 - 后果:构建参数包含空格时会导致 Docker 构建失败或参数值被截断。 2. **.gitea/workflows/ci-pipeline.yml 第482行**:`docker pull` 错误输出被完全屏蔽,可能掩盖权限问题。 - 问题描述:`docker pull ... 2>/dev/null` 将所有错误输出(包括 `denied` 权限错误和 `manifest unknown` 镜像不存在错误)都屏蔽了。如果是因为权限不足导致拉取失败,脚本会错误地进入 "本地构建" 分支,而本地构建往往也需要拉取基础镜像,最终导致构建失败且难以排查原因。 - 后果:在配置错误或权限不足时,CI 行为不符合预期(尝试不必要的本地构建),增加排错难度。 ### 💡 建议(1个可选) 1. **.gitea/workflows/worker-base-image.yml 第42行**:建议在 Docker 登录重试循环结束后增加显式状态检查。 - 具体内容:当前的登录逻辑在循环结束后没有检查最终是否登录成功。虽然后续的 `docker buildx` 或 `docker push` 会因未登录而失败,但提前检查并报错能让错误信息更清晰。建议在循环后增加 `docker info > /dev/null 2>&1 || { echo "Login failed after retries"; exit 1; }`。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 09:06:22 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit e0c3bae072 into develop 2026-07-22 09:08:45 +08:00

🗑️ 预览环境已清理

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

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

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