在为 GitLab Runner 拉取镜像之前登录 Docker

Tro*_*els 6 gitlab docker gitlab-ci gitlab-ci-runner

我已经设置了一个 docker 运行程序,我想在其中运行存储在本地存储库上的映像。我的 /etc/gitlab-runner/config.toml 是

concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800


[[runners]]
  name = "Docker runner"
  url = "https://gitlab.str.corp/"
  token = "*secret*"
  executor = "docker"
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "gitlab.example.com:4443/docker:19.03.1-dind"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/certs/client", "/cache"]
    shm_size = 0
Run Code Online (Sandbox Code Playgroud)

当我提交作业时,它在运行器上启动,但无法拉取图像:

Running with gitlab-runner 13.4.0 (4e1f20da)
  on Docker runner abcde123

Preparing the "docker" executor
Using Docker executor with image gitlab.example.com:4443/docker:19.03.8-git ...
Starting service gitlab.example.com/docker:19.03.1-dind ...
Authenticating with credentials from /root/.docker/config.json
Pulling docker image gitlab.example.com:4443/docker:19.03.1-dind ...
ERROR: Job failed: Error response from daemon: pull access denied for gitlab.example.com:4443/docker, repository does not exist or may require 'docker login': denied: requested access to the resource is denied (docker.go:142:0s)
Run Code Online (Sandbox Code Playgroud)

docker login就是问题所在。docker pull <image>如果我尝试从命令行执行此操作,则会收到相同的错误。然后通过 docker 登录让我拉取镜像。

我非常确定我只需要echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY在拉取图像之前执行此操作,但我不知道如何使其运行。

docker镜像存储在gitlab集成仓库中。 该页面看起来应该自动设置身份验证,但事实显然并非如此。

我需要做什么才能提取私有存储的图像。

Ada*_*all 9

由于运行程序在任何before_scriptscriptafter_script部分运行之前拉取图像,因此您将无法执行 adocker login...来使其工作。您需要提供 Docker Auth 配置文件,以便运行者可以登录。

自定义 docker 注册表的文档包含所有信息,但简而言之,您可以从~/.docker/config.json. 如果它不使用凭证存储(如 MacOS 的钥匙串),您可以直接复制内容并将其作为变量存储在您的.gitlab-ci.yml文件中,或存储在名为 的项目 CI 变量中DOCKER_AUTH_CONFIG。如果该变量存在,运行程序将自动使用它登录注册表,然后提取映像。

如果您的 docker 安装使用上述文档中的凭证存储,还有其他选项可用于提供变量以及要遵循的说明。