如何在 Gitlab-ci 中正确登录以使用来自 GCR 的私有图像?

And*_*rra 5 docker google-cloud-platform gitlab-ci gitlab-ci-runner

我正在尝试登录 CGR 并在 Gitlab-ci runner 中使用一些私有 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
Run Code Online (Sandbox Code Playgroud)

它似乎经过身份验证和授权推/拉图像。

我需要做的是拥有以下内容,我需要转到我的私人存储库并在 gitlab-ci runner 中使用这些图像。像这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到此错误:

在 docker-auto-scale 0277ea0f 上使用 gitlab-runner 11.10.1 (1f513601) 运行 使用 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) 将在 3 秒内重试...

And*_*rra 5

我实现了一个实用的解决方案:

一个人需要使用 wind 服务来重置 docker 配置,然后登录,例如在他们的本地机器上使用:

docker login -u _json_key --password-stdin https://gcr.io < ./keyfile.json
Run Code Online (Sandbox Code Playgroud)

然后,只需将存在的配置复制~/.docker/config.jsonDOCKER_AUTH_CONFIGGitlab CI 中的变量中即可。