1

我正在设置一个 gitlab-ci 进程,但我无法理解我应该如何管理我的秘密......</p>

所以我已经成功启动了一个 gitlab/gitlab-runner 作为 docker 容器,并从 gitlab/dind 注册了一个 docker runner。

在这种情况下,我想要构建的东西只是从 Dockerfile 构建一个 docker 映像,填充缓存以供其他 ci 集成测试构建稍后使用。这是通过将其推送到我的私人 docker 注册表来实现的。在这种情况下,我的 .gitlab-ci.yml 定义只是:

build_image:
  script:
    - docker build -t ensime/ensime-atom-ci .
    - docker tag ensime/ensime-atom-ci docker.woodenstake.se/ensime/ensime-atom-ci
    - docker push docker.woodenstake.se/ensime/ensime-atom-ci

看起来很简单,但当然我在这里没有信用,所以它失败了:

我刚从无人机过来,为此我生成了一个 .sec 文件。

但在这里我应该登录,对吧?所以我在这里读过

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-private-docker-registry

问题是因为我从 dockerized gitlab/gitlab-runner 映像中运行 gitlab-runner,那里似乎甚至没有 docker cli?

viktor@i7:/var/lib$ sudo docker exec -it gitlab-runner docker login
exec: "docker": executable file not found in $PATH

任何提示高度赞赏!

更新澄清:

所以 gitlab-ci 构建日志的尾部是:

012ca7ed9b62: Retrying in 1 seconds
173cd98367a6: Retrying in 1 seconds
92b0661193a5: Retrying in 1 seconds
c12ecfd4861d: Waiting
5f70bf18a086: Retrying in 5 seconds
no basic auth credentials

ERROR: Build failed: exit code 1

主机以 root 身份登录到注册表中。尝试从 docker 容器登录我什至没有 docker cli。

--docker-privileged在跑步者的注册上添加了标志。

我猜凭据需要通过主机 -> gitlab-runner -> runner 实例(dind)

4

2 回答 2

7

如果您使用 GitLab 自己的容器注册表,则必须将以下内容添加到.gitlab-ci.yml文件的脚本部分:

docker login -u gitlab-ci-token -p "${CI_BUILD_TOKEN:-$CI_JOB_TOKEN}" docker.woodenstake.se

如果您使用的是外部注册表,我建议您将凭据作为变量添加到项目设置 > 变量中的构建中,然后您可以将该行添加docker login -u "$USER_VAR" -p "$PASS_VAR" docker.woodenstake.se.gitlab-ci.yml文件中。

它应该如下所示:

build_image:
  script:
    - 'docker login -u "$USER_VAR" -p "$PASS_VAR" docker.woodenstake.se'
    - docker build -t ensime/ensime-atom-ci .
    - docker tag ensime/ensime-atom-ci docker.woodenstake.se/ensime/ensime-atom-ci
    - docker push docker.woodenstake.se/ensime/ensime-atom-ci
于 2016-05-31T00:29:27.757 回答
1

要使用来自私有注册表的图像,运行者需要具有凭据。正如您自己发现的那样, gitlab/gitlab-runner 映像没有docker可用的命令。最简单的解决方案是从运行 runner 的主机登录到您的注册表:

docker login your.registry:5000

之后,~/.docker/config.json/root/.docker/config.json在您的 gitlab-runner 实例中一样安装。

要在构建期间推送图像,请参阅 Eduardo Cardoso 的回答。

于 2016-05-31T12:04:06.723 回答