gcloud - 错误:(gcloud.app.deploy) 获取应用程序权限错误

27

我正在尝试将Node.js应用程序部署到Google Cloud上,但遇到以下错误 -

Step #1: ERROR: (gcloud.app.deploy) Permissions error fetching application [apps
/mytest-240512]. Please make sure you are using the correct project ID and that
you have permission to view applications on the project.

我正在运行以下命令 -

gcloud builds submit . --config cloudbuild.yaml

我的cloudbuild.yaml文件如下所示 -

steps:
  #install
  - name: 'gcr.io/cloud-builders/npm'
    args: ['install']

   #deploy
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy']
6个回答

55

默认的 Cloud Build 服务帐户不允许访问部署 App Engine。您需要启用 Cloud Build 服务帐户以执行部署等操作。

Cloud Build 服务帐户的格式如下:

[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
  • 前往 Google Cloud 控制台 -> IAM 与管理 -> IAM。
  • 找到服务账号并单击铅笔图标。
  • 将角色 “App Engine Deployer” 添加到服务账号中。

等待几分钟让服务账号在全球范围内更新,然后再尝试操作。


谢谢您的回复,John。我还需要启用App Engine API,但现在出现以下消息 - 步骤#1:错误:(gcloud.app.deploy)您的部署已成功,但将新版本推广为默认版本失败。您可能没有更改流量分配的权限。更改流量分配需要Owner、Editor、App Engine Admin或App Engine Service Admin角色。请联系您的项目所有者,并使用“gcloud app services set-traffic --splits <version>=1”命令将流量重定向到您新部署的版本。 - Sachin Vairagi
2
现在可以工作了,在[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com上添加“App Engine Admin”角色后。 - Sachin Vairagi
1
我假设您已经设置了App Engine,这需要选择区域、启用服务等。现在您已经部署了一个应用程序,除了gcloud app deployApp Engine Deployer权限之外,您不需要任何其他东西。将Cloud Build与App Engine Admin一起保留是可以的,因为这是由Google控制的安全服务。 - John Hanley
1
@SachinVairagi 我发现“项目编辑器”加上“应用引擎部署程序”的权限足以使用Cloud Builder将应用部署到GAE标准环境。 - hamx0r
@hamx0r - 谢谢你分享你的解决方案,它可能会帮助到其他人。 - Sachin Vairagi
显示剩余2条评论

6
我今天遇到了同样的错误,解决方法是在控制台上运行以下命令:$ gcloud auth login
这将为您打开一个新的浏览器选项卡,让您使用具有访问您正在尝试部署的项目的凭据进行登录。
之后我成功地部署到gcloud。
注意:我不确定这是否是最佳方法,但我把它作为可能的解决方案留下来,因为这是我通常解决此问题的方式。最坏的情况是,我会纠正自己并学习新东西。

谢谢!这解决了我的问题。 - DFB

5
部署应用程序到App Engine最常见的方法是使用gcloud app deploy ...
当您针对App Engine Flex使用gcloud app deploy时,服务会使用Cloud Build。
完全可以使用Cloud Build来进行部署,但这需要更多的工作量。
我没有尝试过,但我认为,如果您希望使用Cloud Build执行部署,则需要确保Cloud Build服务帐户具有部署到App Engine的权限。
以下是一个示例,说明您需要执行的操作,特别是授予Cloud Build的服务帐户正确的角色

'gcloud app deploy' 正常工作,我能够通过终端在本地系统部署应用。但我想设置“云构建触发器”来自GitHub自动部署。 - Sachin Vairagi
1
好的。请查看我引用的链接。这里展示了如何授予Cloud Build服务帐户在App Engine上进行部署的权限。 - DazWilkin
谢谢Daz。你解决了我的问题。这是一个噩梦般的用户体验。 - Cole Peterson
实际上,您需要授予默认应用引擎服务帐户多个权限,因为构建器会执行多个操作,例如上传到云存储以及构建。 - fIwJlxSzApHEZIl

5
如果您忘记在项目上启用计费,也会出现此错误。我只需转到Google Cloud控制台,搜索App Engine,然后弹出了计费设置。

对我来说也是一样的。一旦我启用了计费,部署就立即成功了。 - undefined

2

如果您已经安装并验证了gcloud sdk,或者在云shell中运行您的项目,则可以使用两个命令处理所需的权限:

export PROJECT_ID=[[put your project id here]]
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")

gcloud iam service-accounts add-iam-policy-binding ${PROJECT_ID}@appspot.gserviceaccount.com \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/iam.serviceAccountUser \
--project=${PROJECT_ID}
```
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
--role=roles/appengine.appAdmin 

谢谢 - 运行得很好 - 只需要删除 ``` 以允许完整命令执行! - James Joyce

1
在我的情况下,问题是我把项目ID错认为项目名称了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接