ci: Worker镜像分层缓存优化,基础镜像预构建预计节省70%构建时间 #693
Reference in New Issue
Block a user
Delete Branch "ci/worker-layered-cache"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
Worker Build 是CI最大瓶颈(~23分钟,占全链路53%),主要耗时在:
这些依赖变化极少,但每次构建都要重新来一遍。
方案:基础镜像预构建 + 业务镜像分层
新增文件
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:从预构建的基础镜像开始,只叠加业务依赖和代码预期收益
合并注意事项
⚠️ 合并前需要先手动构建一次基础镜像,否则Worker构建会因为找不到基础镜像而失败:
缓存策略
:latest标签,业务镜像始终拉取最新稳定版🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #693
⚠️ 问题(2个需要修改)
.gitea/workflows/ci-pipeline.yml 第524行:Shell脚本中未加引号的变量遍历存在分词风险。
for arg in $EXTRA_BUILD_ARGS在shell: sh环境下,如果EXTRA_BUILD_ARGS中的某个参数值包含空格(例如MY_VAR="some value"),Shell 会对空格进行分词,导致参数被错误拆分,构建参数传递错误。.gitea/workflows/ci-pipeline.yml 第482行:
docker pull错误输出被完全屏蔽,可能掩盖权限问题。docker pull ... 2>/dev/null将所有错误输出(包括denied权限错误和manifest unknown镜像不存在错误)都屏蔽了。如果是因为权限不足导致拉取失败,脚本会错误地进入 "本地构建" 分支,而本地构建往往也需要拉取基础镜像,最终导致构建失败且难以排查原因。💡 建议(1个可选)
docker buildx或docker push会因未登录而失败,但提前检查并报错能让错误信息更清晰。建议在循环后增加docker info > /dev/null 2>&1 || { echo "Login failed after retries"; exit 1; }。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 09:06:22 | 模型:
🗑️ 预览环境已清理
PR #693 已关闭或合并,对应的预览环境已被清理。