Gitlab 容器注册表标签过期策略不起作用 - 正则表达式格式?日程?

joe*_*lin 5 gitlab gitlab-ci

我正在尝试 Gitlab“CI/CD > 容器注册表标记过期策略”设置,到目前为止它还没有删除任何内容。我们使用语义版本控制(前面带有“v”),我的目标是自动删除旧的“补丁”版本:

  • 保留所有主要和次要标签:vM.0.0 和 vM.m.0。
  • 删除除少数最近匹配 vM.mp 的标签之外的所有标签(其中 p 不为零)

鉴于我在旧项目上启用此新设置,通过实验找到答案是有风险的。即使在一个新项目中,尝试也需要花费大量的精力和时间。试运行或预览选项在这里非常好,这样我就可以尝试这些设置,而不必担心删除重要标签。

我尝试了以下“过期”正则表达式:v[1-9][0-9]*[.][0-9][0-9]*[.][1-9][0-9]*。到目前为止还没有任何效果。这让我想知道:

  • 这个运行频率是多少?我只需要再等更长的时间吗?
  • 我是否误解了此设置的工作方式?
  • 我的正则表达式不好吗?
  • 甚至期望什么正则表达式格式?
  • 有没有办法查看有关此清理的反馈,例如在项目活动日志中?

我目前的方法是每天调整此设置一次,然后在第二天检查我的标签列表,看看它是否有任何效果。

我希望获得有关验证/排除此设置故障的一般建议,和/或有关如何匹配我的特定版本方案的具体建议。

这是我当前设置的屏幕截图:

Gitlab CI/CD 容器过期策略

joe*_*lin 5

我最终放弃了这一点并采取了不同的方法。也许最令人沮丧的部分是想知道它何时运行。是每天固定时间一次吗?每天随机时间?每次推送到注册表后一次?我不确定要等待多长时间,看看我的设置更改是否会产生影响。

相反,我找到了一个公开所有相同选项的 API 方法。事实上,我更喜欢 API,而不是项目设置

  • 我可以更清楚地看到它如何运行以及何时运行。
  • 我可以看到错误消息和结果。
  • 我可以在 git 中的 .gitlab-ci.yml 中跟踪配置,而不必记录单独的项目设置。

https://docs.gitlab.com/ee/api/container_registry.html#delete-registry-repository-tags-in-bulk给出了概述和一些示例卷曲。以下是我将其添加到管道中的方法:

# In before_script:
- apk --update add curl

...

# In the job script:
    # Get registry id. Assumptions: valid response, "id" is first field, and project only has one registry.
    - REGISTRY_ID=`curl --header "PRIVATE-TOKEN:$API_TOKEN" "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/registry/repositories" | cut -d, -f1 | cut -f2 -d:`
    - TAGS_URL=https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/registry/repositories/$REGISTRY_ID/tags
    - curl --request DELETE --data 'keep_n=10' --data 'older_than=1week' --data "name_regex_delete=v[0-9][.].*" --data "name_regex_keep=.*[.]0" --header "PRIVATE-TOKEN:$API_TOKEN" "$TAGS_URL"
Run Code Online (Sandbox Code Playgroud)

使用 API,我能够快速找出哪些正则表达式模式有效。虽然不是立即生效,但似乎在一分钟内就生效了。我假设我可以采用相同的正则表达式并在项目设置中使用它们,但我现在更高兴坚持使用 API。