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

Din*_*s91 3 gitlab docker gitlab-ci container-registry

我知道这可以通过来完成dockerhub。我想知道是否有类似的东西可用于gitlab注册表。

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

我已经搜索了他们的文档,但找不到任何东西。

注意:这里的用户是部署代码的人。

fpa*_*gio 7

可以使用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
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

除非GitLab Container Registry支持curl dockerhub 所做那种(使用v1/repositories/$1/tags/$2),否则我怀疑它是否提供了该功能。

例如,问题 26866“GitLab 注册表可用图像列表/搜索”在 10 个月后仍处于打开状态。

GitLab 12.2 更新(2019 年 4 月,18 个月后)

在完成实施后,创建两个端点是有意义的:

  • GET /groups/:id/registry/repositories - 返回组内所有项目的所有 Docker 容器存储库的列表,类似于 GET /projects/:id/registry/repositories

  • GET /groups/:id/registry/repositories/tags- 返回组内所有项目的所有 Docker 容器存储库的列表,包括每个容器存储库的所有标签。响应将如下所示:

所以这可以帮助检查是否image:tag存在。


更新GitLab 13.0(2020 年 5 月)

使用搜索快速查找和发现 GitLab Container Registry 中托管的图像

当您或您团队中的某个人将镜像发布到 GitLab Container Registry 时,您需要一种方法来快速找到它并确保镜像构建正确。
如果您使用 GitLab CI/CD 发布每个构建的图像,则很难在当前用户界面中有效地找到图像。相反,您依赖于命令行或 API。

我们很高兴地宣布,在 13.0 中,我们已向 GitLab Container Registry 添加了搜索功能

只需导航到您的项目或组的注册表并输入图像名称即可查看所有图像的列表。

https://docs.gitlab.com/ee/user/packages/container_registry/img/container_registry_repositories_with_quickstart_v13_0.png

请参阅文档问题


mor*_*rty 5

更新:我添加了一个解决方案,该解决方案无需访问以下docker服务器(非特权模式)即可工作。

好的,这是我通过启用实验性客户端功能使用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
Run Code Online (Sandbox Code Playgroud)

exit如果该标记已存在,则终止构建脚本。另外,您还应该知道它会~/.docker/config.json被覆盖。这也是为什么登录必须随后发生的原因。

更新:除了写配置文件,还可以将DOCKER_CLI_EXPERIMENTAL环境变量设置为enabled。因此,前两行可以替换为export DOCKER_CLI_EXPERIMENTAL=enabled

更新: 如果您没有启用特权模式,因此无法访问docker-daemon,则可以使用Harbor提供的Registry-api脚本(请注意,它们是python2。)。如果要使用kaniko构建docker映像,这将很方便,而无需访问docker -daemon。