GitLab Registry清理政策配置失效及规则解读与方案咨询
GitLab Registry 清理政策问题解答
核心疑问解答
“保留每个镜像名称的最新1个标签”中的镜像名称指的是不带标签的基础名称(如foo),不是foo:v1.0.0这种带标签的完整名称。这个规则的作用是:为每个基础镜像名(比如foo),保留推送时间最晚的1个镜像manifest(以及关联的所有标签)。
旧标签未被删除的可能原因
- 清理政策未触发:GitLab的镜像清理默认是每日定时任务,刚配置完规则若未到执行时间,旧标签不会自动删除。你可以手动触发:进入项目「Packages & Registries」→「Container Registry」→「Cleanup policies」,点击「Run cleanup now」。
- 标签与manifest关联:如果多个旧标签指向同一个manifest,且该manifest被保留规则覆盖(比如关联的某个标签符合保留条件),所有关联标签都会被保留。例如旧标签
v1.0.0和v1.0.1共享同一个manifest,而v1.0.1被保留,那v1.0.0也不会被删。 - 规则配置不完整:若只配置“保留最新1个标签”+“删除30天以上镜像”,当
latest和最新版本标签(如v1.0.1)是同一时间推送的不同manifest时,“保留最新1个”只会保留其中一个,另一个若超过30天会被删除,无法满足你同时保留两者的需求。
满足需求的配置方案
要实现「保留最新1个版本标签 + latest标签,删除30天以上旧标签,且避免30天未更新时无镜像可用」,按以下步骤配置:
添加第一个保留规则:
- 规则类型:
按标签模式匹配 - 标签模式:
latest - 保留方式:
保留所有符合条件的镜像
(确保latest标签无论多久未更新都不会被删除)
- 规则类型:
添加第二个保留规则:
- 规则类型:
按标签模式匹配 - 标签模式:
v*(或更精确的v\d+\.\d+\.\d+,匹配你的版本号格式) - 保留方式:
保留每个镜像名称的最新1个标签
(为每个基础镜像名保留推送时间最晚的1个版本标签,比如v1.0.1)
- 规则类型:
设置删除条件:
- 勾选
删除超过 X 天的镜像,将X设为30 - 确保仅删除未被保留规则覆盖的镜像
- 勾选
配置完成后手动触发一次清理,即可验证效果。
额外注意事项
- GitLab清理规则基于镜像manifest而非单个标签,只要一个manifest有任意标签符合保留规则,整个manifest及所有关联标签都会被保留。
- 若版本标签的推送时间与版本号递增顺序一致(如
v1.0.1比v1.0.0推送晚),“保留最新1个版本标签”会自动匹配到最新版本;若推送顺序与版本号不一致,需调整标签命名或确认你的GitLab版本是否支持语义化版本排序。
内容的提问来源于stack exchange,提问作者slhck
相关产品推荐
相关产品推荐

