我正在尝试登录 CGR 并在 Gitlab-ci 运行程序中使用一些私有 docker 镜像。
我在 Google Cloud 中创建了一个新项目并激活了 Google Cloud Registry API。我还创建了一个新的服务帐户 (IAM),在其中我向之前的 Cloud Registry 实例授予了所有权权限。然后我生成了一个 json 密钥。我使用以下 gitlab-ci 配置在本地计算机中测试了密钥:
image: docker:latest
services:
- docker:dind
auth:
stage: auth
script:
- docker login -u _json_key --password-stdin https://gcr.io < ./keyfile.json
似乎已经过身份验证并被授权可以推送/拉取图像。
我需要做的是拥有以下内容,我需要转到我的私人存储库并在 gitlab-ci 运行程序中使用这些图像。像这样的东西:
before_script:
- docker login -u _json_key --password-stdin https://gcr.io < ./keyfile.json
build:
stage: build
image: gcr.io/image-repo/image
script:
- gradle clean build
deploy:
stage: deploy
image: gcr.io/image-repo/image
script:
- gradle publish
only:
- master
但是,我不断收到此错误:
在 docker-auto-scale 上使用 gitlab-runner 11.10.1 (1f513601) 运行 0277ea0f 将 Docker 执行器与映像一起使用 gcr.io/image-repo/image ... 拉取 docker 镜像 gcr.io/image-repo/image ... 错误:准备 失败:来自守护程序的错误响应:未经授权:您没有 执行此操作需要权限,并且您的权限可能无效 证书。要验证您的请求,请按照以下步骤操作: https://cloud.google.com/container-registry/docs/advanced-authentication (executor_docker.go:168:0s) 3s后重试...
我实现了一个实用的解决方案:
需要使用wind服务来重置docker配置,然后登录,例如在本地计算机中使用:
docker login -u _json_key --password-stdin https://gcr.io < ./keyfile.json
然后,只需复制
~/.docker/config.json
中的配置即可
到 Gitlab CI 中的变量 DOCKER_AUTH_CONFIG
就可以开始了。
我能够执行安德烈·格雷罗提到的事情。此链接提供了更全面的解释如何在 gitlab CI 中配置 gcr 私有镜像