如何将Google Cloud构建步骤文本输出保存到文件

时间:2018-09-03 15:24:21

标签: google-cloud-platform gcloud google-cloud-build

我正在尝试使用Google Cloud build。第一步,我需要获取所有正在运行的计算实例的列表。

- name: gcr.io/cloud-builders/gcloud
  args: ['compute', 'instances', 'list']

,效果很好。当我尝试将输出保存到文件时,问题开始了


试验1 :失败

- name: gcr.io/cloud-builders/gcloud
  args: ['compute', 'instances', 'list', '> gce-list.txt']

试验2 :失败

- name: gcr.io/cloud-builders/gcloud
  args: ['compute', 'instances', 'list', '>', 'gce-list.txt']

试验3 :失败

- name: gcr.io/cloud-builders/gcloud
  args: >
      compute instances list > gce-list.txt

试验4 :失败

- name: gcr.io/cloud-builders/gcloud
  args: |
      compute instances list > gce-list.txt

更新:2018-09-04 17:50

试验5 :失败

  1. 基于ubuntu构建gcloud映像
  2. 使用该图像运行自定义脚本文件'list-gce.sh'
  3. list-gce.sh调用gcloud compute instances list

有关更多详细信息,您可以检查以下要点: https://gist.github.com/mahmoud-samy/e67f141e8b5d553de68a58a30a432ed2

不幸的是,我遇到了这个奇怪的错误:

rev 1

  

错误:(gcloud)无法识别的参数:列表(您是说“列表”吗?)

rev 2

  

错误:(gcloud)无法识别的参数:--version(您是说'--version'吗?)

有什么建议或参考吗?

2 个答案:

答案 0 :(得分:3)

除了其他答案外,要执行cmd > foo.txt,还需要将构建入口点覆盖为bash(或sh):

- name: gcr.io/cloud-builders/gcloud
  entrypoint: /bin/bash
  args: ['-c', 'gcloud compute instances list > gce-list.txt']

答案 1 :(得分:2)

这些命令不在shell中执行,因此shell操作(例如管道(|)和重定向(>)不可用。


解决方法

使用一个gcloud具有外壳的容器。 gcr.io/cloud-builders/gcloud容器应具有bash,因为它最终是来自Ubuntu 16.04映像的derived

在您的Cloud Build任务序列中,执行一个Shell脚本,该脚本为您执行gcloud调用,并将输出重定向到文件。这有一些发现:

  • 您需要将shell脚本存储在合理的位置;可能在您的源存储库中,因此它可用于构建。
  • gcloud容器仍然可以使用,因为这将确保您的脚本可以使用Google Cloud SDK工具。您需要将Cloud Build清单中的entrypoint覆盖为/bin/bash或其他外壳,并将路径作为参数传递给脚本。
  • 当DazWilkin标识in a comment时,Cloud Build服务帐户还将需要compute.instances.list权限才能列出实例。

/workspace目录已安装到所有Cloud Build容器中,并且其内容将在后续的构建步骤之间持久保存并可以访问。如果后续的构建步骤需要gcloud命令的输出或后处理的版本,则可以在此处写出。

相关Google documentation