在我的 gitlab-ci 管道的清理阶段,我删除了测试前生成的临时 docker 标签。图像在发布阶段重新标记。删除原始标签时,重新标签也会被删除。阶段是:
build:
script:
- docker build [...] $CI_REGISTRY_IMAGE/<image-name>:${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG} [...]
- docker push $CI_REGISTRY_IMAGE/<image-name>:${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG} [...]
test:
# do some testing
publish:
script:
- docker pull $CI_REGISTRY_IMAGE/<image-name>:${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG}
- docker tag $CI_REGISTRY_IMAGE/<image-name>:${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG} $CI_REGISTRY_IMAGE/<image-name>:${CI_COMMIT_REF_SLUG}
- docker push $CI_REGISTRY_IMAGE/<image-name>:${CI_COMMIT_REF_SLUG}
cleanup:
when: always
script:
- 'curl --request DELETE --header "PRIVATE-TOKEN: ${GITLAB_PAT}" "<gitlab-url>/api/v4/projects/<project-path>/registry/repositories/<repository-id>/tags/${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG}"'
运行后,标签${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG} 和 ${CI_COMMIT_REF_SLUG}都被删除,据我所知,只有${CI_PIPELINE_ID}${CI_COMMIT_REF_SLUG}应该被删除。如果清除阶段被取消,标签会按预期创建并保留。通过 ui 删除标签时会发生相同的行为。如果我在清理阶段时遗漏了与此问题相关的任何内容,请告诉我。