如何在GitLab CI/CD中用GCP服务账号访问Artifact Registry私有镜像
解决方案
1. 生成适用于GitLab CI的Docker认证配置
GitLab CI环境无法直接使用GCP的gcloud凭证助手,必须生成包含实际认证信息的config.json:
- 下载你的GCP服务账号JSON密钥文件(命名为
service-account-key.json) - 执行以下命令完成登录,生成正确的认证配置:
cat service-account-key.json | docker login -u _json_key --password-stdin toto-tata-docker.pkg.dev - 登录成功后,打开本地的
~/.docker/config.json,复制整个JSON内容(此时内容会包含针对目标镜像仓库的auth条目,而非credHelpers):{ "auths": { "toto-tata-docker.pkg.dev": { "auth": "xxxxxxxxxxxxxx..." } } }
2. 给服务账号配置必要权限
作业报错权限拒绝,说明你的服务账号缺少artifactregistry.repositories.downloadArtifacts权限:
- 登录GCP控制台,找到对应的服务账号
- 为其分配Artifact Registry Reader角色(
roles/artifactregistry.reader),该角色包含拉取镜像所需的全部权限 - 也可以更精细地直接添加
artifactregistry.repositories.downloadArtifacts单独权限
3. 在GitLab中配置CI/CD变量
- 进入你的GitLab项目,依次打开Settings > CI/CD > Variables
- 添加名为
DOCKER_AUTH_CONFIG的变量,将刚才复制的config.json内容粘贴到Value字段 - 保存变量后,重新触发CI作业即可正常拉取私有镜像
内容的提问来源于stack exchange,提问作者tbridel
相关产品推荐
相关产品推荐

