如何在 .gitlab-ci.yml 中从 GitLab 的 Docker 注册表中提取?



我最近打开了GitLab的Docker Registry功能,它在我的桌面上运行得很好。我们的下一步是在通过GitLab CI构建软件时使用注册表。而不是构建docker映像,这是在文档中以各种方式描述的,在几个medium.com帖子中,官方twitter帐户提到,我找不到一种方法从GitLab的注册表中提取我们自己的映像。

如果我们通过.gitlab-ci.yml中的image指令从注册表中指定一个图像,我们会得到一个授权错误(我期望工作器可能会透明地授权自己,但事实并非如此):

Running with gitlab-ci-multi-runner 1.4.1 (fae8f18)
Using Docker executor with image registry.host.tld/NAMESPACE/PROJECT:latest ...
Pulling docker image registry.host.tld/NAMESPACE/PROJECT:latest ...
ERROR: Build failed (system failure): API error (500): Get https://registry.host.tld/v2/NAMESPACE/PROJECT/manifests/latest: error parsing HTTP 403 response body: no error details found in HTTP response body: "{"message":"forbidden","status":"error","http_status":403}"

所以worker上应该有人调用docker login。这里有两个问题:

  1. 我们通过LDAP认证我们的用户。我们真的应该为CI服务器创建一个静态用户吗?
  2. 我们有相当多的工人在这里运行。要SSH到每一个都需要做很多工作。

我是否忽略了一些非常明显的东西,或者我应该在每个工作节点上走docker登录的路线?

我也遇到过这个问题。还有一个关于gitlab-ci-multi-runner项目的问题:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1663

参考文档,你应该登录到运行gitlab-runner的机器上的私有注册表:在这里输入链接描述

如果你在docker容器中使用gitlab-runner,你必须将带有登录凭证的文件挂载到gitlab runner容器中。所以运行gitlab容器的命令是这样的:

docker run -d --name gitlab-runner --restart always 
       -v /var/run/docker.sock:/var/run/docker.sock 
       -v /srv/gitlab-runner/config:/etc/gitlab-runner 
       -v /root/.docker/config.json:/root/.docker/config.json 
          gitlab/gitlab-runner

引用这个例子,root必须登录到注册表:

docker login https://registry.host.tld:5000
这里的重要部分是用于注册的URI。我得到了一个类似于你的错误,并通过运行 来克服它:
docker login https://registry.host.tld:5000/v2/

这可能在其他注册中心有所不同,您必须查看eor消息并使用'namespace/project/之前的部分作为登录路径。

。如果错误信息看起来像这样:

ERROR: Build failed (system failure): API error (500): 
Get https://registry.host.tld/v1/NAMESPACE/PROJECT/manifests/latest: 
error parsing HTTP 403 response body: no error details found in HTTP response body: "
{"message":"forbidden","status":"error","http_status":403}"

登录名必须为:

docker login https://registry.host.tld/v1/

最新更新