当指定凭证助手时,GitLab runner 忽略 DOCKER_AUTH_CONFIG

GitLab runner ignoring DOCKER_AUTH_CONFIG when credential helper specified

我们有一个 GitLab CI 管道,目前从我们的内部 Docker 注册表中提取图像,使用 .gitlab-ci.yml:

中定义的变量进行身份验证
variables:
  ...
  DOCKER_AUTH_CONFIG: '{"auths": {"our.registry": {"auth": "$B64AUTH"}}}'

这很好用。

我们正在尝试在管道末尾添加一个步骤,以将我们构建的 Docker 图像推送到 Amazon ECR 注册表。我们已经在我们的 运行ner 实例上安装了 amazon-ecr-credential-helper,并赋予它们正确的 IAM 权限,以便能够推送到这些注册表。我们已将 .gitlab-ci.yml 变量更改为:

DOCKER_AUTH_CONFIG: '{"auths": {"our.registry": {"auth": "$B64AUTH"}}, "credHelpers": { "<account-id>.dkr.ecr.<region>.amazonaws.com": "ecr-login"}}'

然而,这会导致 运行ner 无法对我们的内部注册表进行身份验证,因此它无法提取我们的作业 运行 所在的图像。而以前我们会在管道作业的日志中看到:

Authenticating with credentials from $DOCKER_AUTH_CONFIG

...我们不再看到这个。我们甚至还没有到达我们想要推送到 ECR 的步骤。

我们在凭据助手周围添加了一个包装器脚本,以将所有来龙去脉记录到一个文件中,并尝试调试正在发生的事情。但是,似乎根本没有调用助手,因为日志文件中没有任何内容。

我们可以做些什么来让它发挥作用?

我们这里的问题归结为多种原因:

  • 由于我们在 DOCKER_AUTH_CONFIG 中引用了凭证助手,因此我们需要在生成跑步者的机器上安装该助手。 (我们使用 docker+machine 运行器。)这台机器还需要 IAM 权限。没有这个,它就完全放弃了 DOCKER_AUTH_CONFIG 变量(如果你问我,这是一个有问题的决定......)
  • 为了从作业中进行身份验证并将图像推送到 ECR,我们也需要在那里配置助手。为此,我们修改了生成器的 config.toml 文件以添加体积 /usr/bin/docker-credential-ecr-login:/usr/bin/docker-credential-ecr-login。 (我们还安装了日志目录和我们的帮助程序包装器。)在 docker push 命令中,我们添加了一个 --config docker-config 标志,并将适当的配置写入 docker-config.config.json
  • 最后,我们的工作图像是 docker/compose,而我们冗长的包装器是用 bash 编写的,它不包含在该图像中,所以这是另一个无声的失败。 .