将信用卡传递给gitlab-ci,以便能够推动码头图像...?

时间:2016-04-07 13:03:15

标签: gitlab-ci-runner

我正在建立一个gitlab-ci进程,但是我无法理解如何管理我的秘密......

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

我想在这种情况下构建的东西只是从Dockerfile构建一个docker镜像,填充缓存以供其他ci集成测试版本使用。这通过推送到我的私人码头注册表。在这种情况下,我的.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 - >跑步者实例(dind)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

docker login your.registry:5000

之后,在您的gitlab-runner实例中将~/.docker/config.json挂载为/root/.docker/config.json

要在构建过程中推送图像,请参阅Eduardo Cardoso的回答。