运行 从 bitbucket 到 GCP 的管道出错
Error while running pipeline from bitbucket to GCP
我正在尝试 运行 从 bitbucket 到 GCP 的管道。这是我的管道配置:
image: node:10.15.3
pipelines:
default:
- parallel:
- step:
name: Build and Test
caches:
- node
script:
- npm install
- step:
name: Deploy
deployment: staging
script:
- curl -o /tmp/google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-347.0.0-linux-x86_64.tar.gz
- tar -xvf /tmp/google-cloud-sdk.tar.gz -C /tmp/
- /tmp/google-cloud-sdk/install.sh -q
- source /tmp/google-cloud-sdk/path.bash.inc
- gcloud -v
- echo "${KEY_FILE}" | base64 --decode --ignore-garbage > ./gcloud-api-key.json
- gcloud auth activate-service-account --key-file gcloud-api-key.json
- echo "$(gcloud auth list)"
- gcloud config unset project
- gcloud config set project $PROJECT_ID
- echo "GCLOUD" "$(gcloud iam service-accounts list)"
- echo "$(gcloud projects list)"
#- gcloud auth login
- gcloud app deploy # getting error here
在 GCP 仪表板上,我从顶部下拉菜单中选择了我的项目并创建了服务帐户。我的服务帐户拥有这些权限:
我已经下载了服务帐户 json 并在使用 base64 编码后将环境变量 KEY_FILE
添加到 bitbucket(执行 base64 <service-account>.json
并将输出粘贴到变量)。 PROJECT_ID
变量包含来自 GCP 的项目 ID。
为管道命令添加输出:
gcloud auth activate-service-account --key-file gcloud-api-key.json
Activated service account credentials for:
[service-account-name@project-id.iam.gserviceaccount.com]
echo "$(gcloud auth list)"
To set the active account, run:
$ gcloud config set account ACCOUNT
ACTIVE ACCOUNT
-
service-account-name@project-id.iam.gserviceaccount.com
gcloud config unset project
Unset property [core/project].
gcloud config set project $PROJECT_ID
Updated property [core/project].
WARNING: You do not appear to have access to project [PROJECT_ID] or it does not exist.
echo "$(gcloud projects list)"
Listed 0 items.
gcloud app deploy
ERROR: (gcloud.app.deploy) Permissions error fetching application
经过几个小时的研究,我无法解决问题。任何输入都会有所帮助。
您应该能够从任何 机器运行 脚本,这将有助于调试; 运行 它在本地(可能在 'clean' 容器内)发现错误。
您包含引用 service-account-name@project-id.iam.gserviceaccount.com
、iam.gserviceaccount.com
的输出建议使用用户创建的服务帐户。
但是,您在屏幕截图中引用的帐户是 App Engine 默认服务帐户 appspot.gserviceaccount.com
。
您可能已经为它创建了一个服务帐户和一个密钥,但没有为其分配任何权限。这将解释错误。
服务帐户由特定项目拥有,您可以使用以下方法列出特定项目中的服务帐户:
PROJECT=[[YOUR-PROJECT-ID]]
gcloud iam service-accounts list \
--project=${PROJECT}
您可以使用以下方式列出项目的权限:
gcloud projects get-iam-policy ${PROJECT}
NOTE Service Accounts must be role
'd on every project or project resources on which the account needs permissions.
NOTE To list projects, an account requires the IAM permission resourcemanager.projects.list
. This must be enabled on an organization or folder link
正如@DazWilkin 所说,当服务帐户处于活动状态时尝试激活项目 (gcloud config set project $PROJECT_ID
) 时会出现此问题,因为服务帐户仅对添加了它的项目具有权限。您可以在激活服务帐户(即在 gcloud auth activate-service-account --key-file gcloud-api-key.json
之后)后立即使用命令 gcloud projects list
进行检查,它会显示一个列表,其中包含活动帐户可以访问的所有项目。如果您想使用其他项目的服务帐户,则必须将其添加到每个项目中(检查此 )。
我正在尝试 运行 从 bitbucket 到 GCP 的管道。这是我的管道配置:
image: node:10.15.3
pipelines:
default:
- parallel:
- step:
name: Build and Test
caches:
- node
script:
- npm install
- step:
name: Deploy
deployment: staging
script:
- curl -o /tmp/google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-347.0.0-linux-x86_64.tar.gz
- tar -xvf /tmp/google-cloud-sdk.tar.gz -C /tmp/
- /tmp/google-cloud-sdk/install.sh -q
- source /tmp/google-cloud-sdk/path.bash.inc
- gcloud -v
- echo "${KEY_FILE}" | base64 --decode --ignore-garbage > ./gcloud-api-key.json
- gcloud auth activate-service-account --key-file gcloud-api-key.json
- echo "$(gcloud auth list)"
- gcloud config unset project
- gcloud config set project $PROJECT_ID
- echo "GCLOUD" "$(gcloud iam service-accounts list)"
- echo "$(gcloud projects list)"
#- gcloud auth login
- gcloud app deploy # getting error here
在 GCP 仪表板上,我从顶部下拉菜单中选择了我的项目并创建了服务帐户。我的服务帐户拥有这些权限:
我已经下载了服务帐户 json 并在使用 base64 编码后将环境变量 KEY_FILE
添加到 bitbucket(执行 base64 <service-account>.json
并将输出粘贴到变量)。 PROJECT_ID
变量包含来自 GCP 的项目 ID。
为管道命令添加输出:
gcloud auth activate-service-account --key-file gcloud-api-key.json
Activated service account credentials for: [service-account-name@project-id.iam.gserviceaccount.com]
echo "$(gcloud auth list)"
To set the active account, run: $ gcloud config set account
ACCOUNT
ACTIVE ACCOUNT
service-account-name@project-id.iam.gserviceaccount.com
gcloud config unset project
Unset property [core/project].
gcloud config set project $PROJECT_ID
Updated property [core/project]. WARNING: You do not appear to have access to project [PROJECT_ID] or it does not exist.
echo "$(gcloud projects list)"
Listed 0 items.
gcloud app deploy
ERROR: (gcloud.app.deploy) Permissions error fetching application
经过几个小时的研究,我无法解决问题。任何输入都会有所帮助。
您应该能够从任何 机器运行 脚本,这将有助于调试; 运行 它在本地(可能在 'clean' 容器内)发现错误。
您包含引用 service-account-name@project-id.iam.gserviceaccount.com
、iam.gserviceaccount.com
的输出建议使用用户创建的服务帐户。
但是,您在屏幕截图中引用的帐户是 App Engine 默认服务帐户 appspot.gserviceaccount.com
。
您可能已经为它创建了一个服务帐户和一个密钥,但没有为其分配任何权限。这将解释错误。
服务帐户由特定项目拥有,您可以使用以下方法列出特定项目中的服务帐户:
PROJECT=[[YOUR-PROJECT-ID]]
gcloud iam service-accounts list \
--project=${PROJECT}
您可以使用以下方式列出项目的权限:
gcloud projects get-iam-policy ${PROJECT}
NOTE Service Accounts must be
role
'd on every project or project resources on which the account needs permissions.
NOTE To list projects, an account requires the IAM permission
resourcemanager.projects.list
. This must be enabled on an organization or folder link
正如@DazWilkin 所说,当服务帐户处于活动状态时尝试激活项目 (gcloud config set project $PROJECT_ID
) 时会出现此问题,因为服务帐户仅对添加了它的项目具有权限。您可以在激活服务帐户(即在 gcloud auth activate-service-account --key-file gcloud-api-key.json
之后)后立即使用命令 gcloud projects list
进行检查,它会显示一个列表,其中包含活动帐户可以访问的所有项目。如果您想使用其他项目的服务帐户,则必须将其添加到每个项目中(检查此