我正在尝试sample
在具有关联启动脚本的 Google Cloud 中创建一个 Compute Engine VM 实例startup_script.sh
。在启动时,我希望能够访问存储在 Cloud Source Repository 中的文件。因此,在这个脚本中,我使用克隆一个存储库
gcloud source repos clone <repo name> --project=<project name>
此外,startup_script.sh
还运行命令,例如
gcloud iam service-accounts keys create key.json --iam-account <account>
创建.json
凭据,以及
EXTERNAL_IP = $(gcloud compute instances describe sample --format='get(networkInterfaces[0].accessConfigs[0].natIP)' --zone=us-central1-a)
获取VM内VM的外部IP。为了不出错地运行这些命令,我发现我需要对多个 Cloud API 访问范围进行部分或完全访问。
如果我在创建虚拟机后手动编辑它以允许这样做并重新启动它,startup_script.sh
运行良好,即我可以看到每个命令成功完成的结果。但是,我想在创建 VM 时分配这些范围,而不必事后手动编辑范围。我在文档中发现为了做到这一点,我可以运行
gcloud compute instances create sample --image-family=ubuntu-1804-lts --image-project=ubuntu-os-cloud --metadata-from-file=startup-script=startup_script.sh --zone=us-central1-a --scopes=[cloud-platform, cloud-source-repos, default]
但是,当我在 Cloud Shell 中运行此命令时,我一次只能添加一个范围,即--scopes=cloud_platform
,或者如果我尝试输入多个范围,如上面的命令所示,我得到
ERROR: (gcloud.compute.instances.create) unrecognized arguments:
cloud-source-repos,
default]
按照文档建议添加多个范围似乎不起作用。使用范围的 URI 而不是它的别名时,我得到了类似的错误。
关于为什么会发生这种情况的任何明显原因?我觉得这可能与与sample
VM 关联的服务帐户(或缺少服务帐户)有关,但我对此并不完全熟悉。
奖励:理想情况下,我想在一个cloudbuild.yaml
文件中运行 VM 创建云 shell 命令,我有
steps:
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: gcloud
args: ['compute', 'instances', 'create', 'sample', '--image-family=ubuntu-1804-lts', '--image-project=ubuntu-os-cloud', '--metadata-from-file=startup-script=startup_sample.sh', '--zone=us-central1-a', '--scopes=[cloud-platform, cloud-source-repos, default]']
我可以使用提交构建
gcloud builds submit --config cloudbuild.yaml .
我的设置方式有什么问题cloudbuild.yaml
吗?