Google cloud platform 在构建步骤中,如何从shell脚本调用gcloud命令?

Google cloud platform 在构建步骤中,如何从shell脚本调用gcloud命令?,google-cloud-platform,google-cloud-build,Google Cloud Platform,Google Cloud Build,我在谷歌云中设置了自动构建,因此每次我推送到存储库的主分支时,都会构建一个新的映像并推送到谷歌容器注册中心 这些图片堆积得很快,我不需要所有的旧图片。因此,我想添加一个构建步骤,该步骤运行一个bash脚本,该脚本调用gcloud容器图像列表标记,循环结果,并使用gcloud容器图像删除删除删除旧的结果 我有脚本编写,它在本地工作。我很难弄清楚如何在CloudBuilder中作为一个步骤来运行它 似乎有两种选择: - name: 'ubuntu' args: ['bash', './conta

我在谷歌云中设置了自动构建,因此每次我推送到存储库的主分支时,都会构建一个新的映像并推送到谷歌容器注册中心

这些图片堆积得很快,我不需要所有的旧图片。因此,我想添加一个构建步骤,该步骤运行一个bash脚本,该脚本调用gcloud容器图像列表标记,循环结果,并使用gcloud容器图像删除删除删除旧的结果

我有脚本编写,它在本地工作。我很难弄清楚如何在CloudBuilder中作为一个步骤来运行它

似乎有两种选择:

- name: 'ubuntu'
  args: ['bash', './container-registry-cleanup.sh']
在cloudbuild.yml的上述步骤中,我尝试在ubuntu映像中运行bash命令。这不起作用,因为此映像中不存在gcloud命令

- name: 'gcr.io/cloud-builders/gcloud'
  args: [what goes here???]
在cloudbuild.yml中的上述步骤中,我尝试使用gcloud映像,但由于传递给此生成器的参数将直接传递给gcloud,因此我不知道如何在此处调用bash脚本


我能做什么?

根据官方文档所示,您需要一个自定义构建步骤来从源代码执行shell脚本,该步骤的容器映像必须包含一个能够运行脚本的工具

下面的示例显示如何配置args,以便正确执行

steps:
- name: 'ubuntu'
  args: ['bash', './myscript.bash']
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/custom-script-test', '.']
images: ['gcr.io/$PROJECT_ID/custom-script-test']
我建议您查看上述文档和示例,以测试并确认它是否有助于实现脚本的执行

具体来说,对于您的情况,还有另一个答案,其中指出您将需要覆盖构建到bash的端点,以便脚本运行。具体如下:

- name: gcr.io/cloud-builders/gcloud
  entrypoint: /bin/bash
  args: ['-c', 'gcloud compute instances list > gce-list.txt']
除此之外,下面这两篇文章还包含了更多关于如何配置定制脚本以在云构建中运行的信息和示例,我建议您看看


如果这些信息对你有帮助,请告诉我

您可以自定义构建步骤的入口点。如果需要安装gcloud,请使用gcloud cloud builder并执行此操作

step:
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: "bash"
    args:
      - "-c"
      - |
          echo "enter 1 bash command per line"
          ls -la
          gcloud version
          ...

我已经阅读了文件。这并不能回答我的问题。在我最初的帖子中,我将自定义构建步骤描述为选项1。问题是,当谷歌已经提供内置gcloud工具的图像时,如何从shell脚本发出gcloud请求,而不必在Ubuntu图像中安装和验证gcloud工具?正如在这个答案中阐明的,您需要强制bash才能正确运行。我会在这段时间内寻找替代品。这太棒了@cilphex!谢谢你的确认。请考虑一下我的回答,如果你认为最后我能帮助你。非常感谢。