当指定凭证助手时,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 编写的,它不包含在该图像中,所以这是另一个无声的失败。 .
我们有一个 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 编写的,它不包含在该图像中,所以这是另一个无声的失败。 .