Docker 从github操作访问gcloud中的服务帐户时出现问题
我对github actions和gcloud还很陌生。我很难让我的github CI/CD管道运行,因为由于访问限制,我无法将任何docker映像推送到google云注册表 到目前为止,我做了什么:Docker 从github操作访问gcloud中的服务帐户时出现问题,docker,gcloud,github-actions,Docker,Gcloud,Github Actions,我对github actions和gcloud还很陌生。我很难让我的github CI/CD管道运行,因为由于访问限制,我无法将任何docker映像推送到google云注册表 到目前为止,我做了什么: 我在github上托管了一个Quarkus应用程序 我使用github操作构建Maven项目和docker映像 我在google Cloud中创建了一个项目,并添加了一个用于github操作的服务帐户。登录似乎可以工作: 如果我现在尝试推送docker映像,我会收到以下(预期)错误消息:
- 我在github上托管了一个Quarkus应用程序
- 我使用github操作构建Maven项目和docker映像
- 我在google Cloud中创建了一个项目,并添加了一个用于github操作的服务帐户。登录似乎可以工作:
- 如果我现在尝试推送docker映像,我会收到以下(预期)错误消息:
- 接下来,我打开谷歌云控制台,创建了一个具有必要权限的自定义角色(IAM&Admin->Roles->Create role)
- 然后,我很难将新的自定义角色分配给服务帐户(IAM&Admin->service Accounts->Manage Access->Add member)。我将服务帐户的电子邮件地址用作“新成员”,但我无法选择刚刚创建的自定义角色我错过了什么?
- 我在某个地方读到,我也可以作为成员添加服务帐户(IAM&Admin->IAM->add)。我再次使用服务帐户的电子邮件地址作为“新成员”。这次我可以选择我的自定义角色第一种方法有什么区别?
- 无论如何,如果我再次尝试运行github操作,现在会出现以下错误:
非常感谢您的帮助。非常感谢 调试此操作的一种方法是在本地主机上为服务帐户创建密钥,将脚本|
gcloud
配置为使用服务帐户作为其凭据,然后手动尝试推送
一个直接的问题可能是您没有针对Google容器注册中心(GCR)进行身份验证。GCR实现Docker的注册表API,在与注册表交互之前,您需要使用其中一种机制来
注:
storage.bucket.get
。我认为您可以从角色/storage.admin
()开始,也许以后可以进行优化角色/storage.admin
,在这种情况下,权限适用于所有云存储资源,或者向特定的Bucket授予权限,在这种情况下,权限仅适用于Bucket及其对象非常感谢你的想法,我将尝试一下并报告结果。
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.
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.