我正在尝试使用Google Cloud Provider CloudBuild 将新的更改部署到kubernetes集群。每当我进行一些更改时,触发器都可以正常工作,并且可以开始新的构建,但这是我使用cloudbuild.yaml遇到的问题。
cloudbuild.yaml
steps:
#step1
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/cloudbuildtest-image', '.' ]
#step 2
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/$PROJECT_ID/cloudbuildtest-image']
#step 3 for testing
name: 'gcr.io/cloud-builders/kubectl'
args: ['get', 'pods']
env:
- 'CLOUDSDK_COMPUTE_ZONE=us-central1-a'
- 'CLOUDSDK_CONTAINER_CLUSTER=cloudbuild-test'
#STEP-4
images:
- 'gcr.io/$PROJECT_ID/cloudbuildtest-image'
第1步和第2步工作正常,但第3步的问题在于出于测试目的,我只运行了 get pods 命令以测试其是否有效。这是我在日志中遇到的问题。
Running: gcloud container clusters get-credentials --project="journeyfoods-io" --zone="us-central1-a" "cloudbuild-test"
Fetching cluster endpoint and auth data.
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/XXXX/zones/us-central1-a/clusters/cloudbuild-test".
它正在寻找什么权限?我需要做些吗 在执行步骤之前进行身份验证,或者我到底缺少什么?
答案 0 :(得分:1)
使用[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com
服务帐户执行Cloud Build构建的步骤。来自Cloud Build documentation page的以下主题:
启用Cloud Build API时,服务帐户为 自动创建并授予Cloud Build Service Account角色 为您的项目。这个角色足以完成多项任务, 包括:
- 从项目的Cloud Source存储库中获取代码
- 从项目拥有的任何Cloud Storage存储桶下载文件
- 在Cloud Logging中保存构建日志
- 将Docker映像推送到Container Registry
- 从Container Registry中拉取基础图像
但是,此服务帐户默认情况下不具有某些操作的权限(尤其是默认情况下不会container.clusters.get
权限)。因此,您需要grant it拥有适当的IAM角色。在您的情况下,Kubernetes Engine Developer
角色包含container.clusters.get
权限,如您在this page中所见。