首页 文章

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

提问于
浏览
1

我正在 Build 一个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 - > runner instance(dind)

2 回答

  • 6

    如果您使用的是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

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

    docker login your.registry:5000
    

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

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

相关问题