我们有一个GitLab CI管道,该管道基于Hashicorp Vault秘密后端的外部ETCD快照构建新的Docker映像。该映像用于灾难恢复,因此我们对保留注册表中的旧版本没有任何兴趣。
有什么方法可以清除早于特定日期的GitLab注册表容器映像。还是保留最大数量的最新图像并删除其余图像?
谢谢
S
答案 0 :(得分:4)
GitLab 12.8 (Feb. 2020)引入了“标签过期政策”。
GitLab 13.0 (May 2020)通过以下方式增强了该功能:
定义政策以确保绝不删除重要图像
使用GitLab的图片过期政策时,无法表达诸如“无论如何,请勿删除此标签”之类的内容。
这会给删除过程带来风险,因为可以删除应该是不变的发行或主映像。
我们很高兴在13.0版中宣布,您现在可以更新项目的过期政策,以标识您不想删除的图像。
只需启用该策略并使用正则表达式即可识别要保留的图像。
请参见documentation和issue。
使用GitLab 13.5(2020年10月):
容器注册表清理政策的重大改进
对标签使用清理策略从容器注册表中删除不需要的标签时,您可能已经注意到,并非总是像期望的那样删除标签。
因此,很可能您必须使用GitLab API手动delete registry tags in bulk进行干预,或者您忽略了该问题,从而增加了存储成本。有两个可能引起问题的潜在问题。第一个问题与gitlab-#219915有关。此问题解决了一个错误,该错误在用户界面中创建的某些策略失败,因为
user
没有传递给DeleteTagService
。此外,您可能会遇到一个问题,该问题在其中运行了策略,但仅部分完成。当策略尝试删除许多图像而超时时,会发生这种情况。如果发生这种情况,它将继续在该策略的下一次预定运行中删除代码。继续前进,您将看到一条警告,表明尚有部分运行的策略。这样,您可以决定是否要手动进行干预。
我们为此功能计划了其他几项改进,包括support for all historical projects和preview of tags that will be removed。
请参见Documentation和Issue。
答案 1 :(得分:1)
如果您只需要一张图片,一种直接的方法就是始终推送到registry.example.com/group/project/image:latest
。这将覆盖现有的。
如果要使用提交哈希或类似标记来标记图像,则更加困难。 不幸的是,还没有办法自动清理旧图像,但这是一个非常需要的功能,请参见未解决的问题:
目前,人们已经做出了解决方法。例如
这两个都是有趣的项目,可以立即为您提供帮助。如果您可以等待,我希望GitLab在未来几个月内将实现实际的注册表清理功能。
答案 2 :(得分:0)
运行此命令:
sudo gitlab-ctl registry-garbage-collect -m