我正在建立一个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文件。
但在这里我应该登录,对吗?所以我在这里读到了
问题是因为我在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)
答案 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的回答。