如何检查gitlab容器注册表中是否存在image:标记

时间:2017-12-05 19:01:14

标签: gitlab container-registry

我知道可以使用dockerhub完成此操作。我想知道gitlab注册表是否有类似的东西可用。

用例是,我编写了一个结构脚本,用于将部署恢复到用户提供的特定标记。在实际提取图像之前,我想知道注册表中是否存在具有指定标记的图像,并相应地警告用户。

我在他们的文档中搜索过,但找不到任何内容。

注意:此处的用户是部署代码的人。

3 个答案:

答案 0 :(得分:4)

好的,这是我通过启用实验性客户端功能而使用docker:stable映像提出的解决方案。

mkdir -p ~/.docker
"echo '{\"experimental\": \"enabled\"}' > ~/.docker/config.json"
docker  login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
docker  manifest inspect $IMGNAME:$IMGTAG > /dev/null && exit || true

如果标签已经存在,exit将终止构建脚本。另外,您还应该注意~/.docker/config.json被覆盖。这就是为什么登录必须随后发生的原因。

答案 1 :(得分:2)

除非GitLab Container Registry支持kind of curl dockerhub doesv1/repositories/$1/tags/$2),否则我怀疑它是否提供此功能。

例如,issue 26866 "GitLab Registry available images list/search"在10个月后仍然开放。

答案 2 :(得分:2)

可以使用Gitlab API。

tag=tag_name
image=image_name
private_token=gitlab_private_token
project=project_number
repo_id=$(curl --header "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$project/registry/repositories" | jq -c --arg regex ".*\\$image$" '.[] | select(.path | test($regex))'.id)

if [ $( curl --header "PRIVATE-TOKEN: $private_token" "https://gitlab.com/api/v4/projects/$project/registry/repositories/$repo_id/tags/$tag" | jq -r '.name' ) == "$tag" ] ; then
  echo "$tag exists"
else
  echo "$tag does not exist"
fi