fix(ci): ACR cleanup改到Deploy之后运行,保护当前构建tag不被误删 #614
Reference in New Issue
Block a user
Delete Branch "fix/acr-cleanup-timing"
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?
问题根因
ACR cleanup和Deploy Staging并行运行,缓存构建的web镜像(40秒完成)manifest的created时间是缓存的旧时间,ACR cleanup按created时间排序时把它当成老镜像删了。Deploy去拉的时候镜像已经不存在,报not found。
修复
影响
🚀 预览环境已部署
代码审查结果 - PR #614
⚠️ 问题(2个需要修改)
scripts/ci/acr_cleanup.py 第285行:Tag匹配逻辑存在风险,
startswith可能导致保护失效。repo/image:sha)或仅仅是Tag名(如sha)。如果t["tag"]返回的是完整镜像名,使用startswith(sha)将无法匹配,导致当前构建的镜像被误删。即使Tag仅为sha,使用startswith也会错误匹配以该SHA开头的其他Tag(如sha-timestamp)。t["tag"]的格式。如果是完整镜像名,建议使用endswith(":" + protected_tag)或in操作符;如果确定Tag名即为SHA,建议使用==进行精确匹配。.gitea/workflows/ci-pipeline.yml 第911行:作业依赖变更可能导致清理任务被跳过。
build-staging改为deploy-staging意味着只有当部署成功时才会执行清理。虽然代码中增加了PROTECTED_TAG保护机制,理论上可以在构建后立即运行清理,但此变更引入了新的风险。deploy-staging阶段失败,清理任务将不会执行。长期来看,这可能导致旧镜像堆积,存储空间无法释放,除非有其他定时清理任务。build-staging或独立运行;必须确认deploy-staging失败时是否需要跳过清理。💡 建议(1个可选)
PROTECTED_TAG后,建议打印日志确认该变量是否被正确传入,便于排查CI环境变量传递问题。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 21:22:47 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #614 已关闭或合并,对应的预览环境已被清理。