我对 github 操作和 gcloud 很陌生。我无法运行 github-CI/CD-Pipeline,因为由于访问限制,我无法将任何 docker 映像推送到 google Cloud Registry。
到目前为止我做了什么:
Run google-github-actions/setup-gcloud@master
/usr/bin/tar xz --warning=no-unknown-keyword -C /home/runner/work/_temp/ac85f67a-89fa-4eb4-8d30-3f6379124ec2 -f /home/runner/work/_temp/de491940-a4b1-4a15-bf0a-95d563e68362
/opt/hostedtoolcache/gcloud/342.0.0/x64/bin/gcloud --quiet config set project ***
Updated property [core/project].
Successfully set default project
/opt/hostedtoolcache/gcloud/342.0.0/x64/bin/gcloud --quiet auth activate-service-account github-actions@***.iam.gserviceaccount.com --key-file -
Activated service account credentials for: [github-actions@***.iam.gserviceaccount.com]
Run docker push "$GCR_HOSTNAME/$PROJECT_ID/$IMAGE:$IMAGE_TAG"
The push refers to repository [eu.gcr.io/***/***]
715ac1ae8693: Preparing
435cfe5f5775: Preparing
313d03d71d4d: Preparing
c5c8d86ccee1: Preparing
1b0f2238925b: Preparing
144a43b910e8: Preparing
4a2bc86056a8: Preparing
144a43b910e8: Waiting
4a2bc86056a8: Waiting
denied: Token exchange failed for project '***'. Caller does not have permission 'storage.buckets.get'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control
Error: Process completed with exit code 1.
接下来,我打开了 Google Cloud Console 并创建了一个具有必要权限的自定义角色(IAM 和管理员 -> 角色 -> 创建角色)。
然后,我无法将我的新自定义角色分配给服务帐户(IAM 和管理员 -> 服务帐户 -> 管理访问权限 -> 添加成员)。我将服务帐户的电子邮件地址用作“新成员”,但无法选择我刚刚创建的自定义角色。 我在这里遗漏了什么?
我在某处读到我还可以将服务帐户添加为成员(IAM 和管理员 -> IAM -> 添加)。我再次使用服务帐户的电子邮件地址作为“新成员”。这次我可以选择我的自定义角色。 与第一种方法有何不同?
无论如何,如果我再次尝试运行 github 操作,现在我会收到以下错误:
Run docker push "$GCR_HOSTNAME/$PROJECT_ID/$IMAGE:$IMAGE_TAG"
The push refers to repository [eu.gcr.io/***/***]
c4f14c9d3b6e: Preparing
fe78d438e8e2: Preparing
843fcae4a8f4: Preparing
dcf8cc80cedb: Preparing
45e8815b101d: Preparing
144a43b910e8: Preparing
4a2bc86056a8: Preparing
144a43b910e8: Waiting
4a2bc86056a8: Waiting
denied: Access denied.
Error: Process completed with exit code 1.
错误信息是不同的,所以我猜服务帐户的权限以某种方式起作用了,但我仍然无法成功。 我错过了哪些步骤?
非常感谢任何帮助。非常感谢!
答案 0 :(得分:1)
一种调试方法是在本地主机上为服务帐户创建一个密钥,配置您的脚本|gcloud
以使用服务帐户作为其凭据,然后手动尝试推送。
一个直接的问题可能是您没有针对 Google Container Registry (GCR) 进行身份验证。 GCR 实现了 Docker 的注册表 API,您需要使用其中一种机制来authenticate之前您可以与注册表交互。
注意事项:
storage.buckets.get
。我认为您可以从 roles/storage.admin
(link) 开始,然后再完善。roles/storage.admin
到项目,在这种情况下,权限适用于所有 Cloud Storage 资源或特定存储桶,在这种情况下,权限仅适用于存储桶及其对象。