15

我正在尝试使用谷歌云构建。在一个步骤中,我需要获取所有正在运行的计算实例的列表。

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

它工作正常。当我尝试将输出保存到文件时出现问题


试验一:失败

- 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. 列出 gce.sh 调用gcloud compute instances list

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

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

第 1 版

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

第 2 版

错误:(gcloud)无法识别的参数:--version(您的意思是“--version”吗?)

有什么建议或参考吗?

4

2 回答 2

18

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

- name: gcr.io/cloud-builders/gcloud
  entrypoint: /bin/bash
  args: ['-c', 'gcloud compute instances list > gce-list.txt']
于 2018-09-05T02:51:52.417 回答
5

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


解决方法

使用外壳的gcloud容器。容器应该有,因为它最终派生自 Ubuntu 16.04 映像。gcr.io/cloud-builders/gcloudbash

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

  • 您需要将 shell 脚本存储在合理的位置;可能在您的源存储库中,因此它可用于构建。
  • gcloud容器仍然可以使用,因为这将确保您的脚本可以使用 Google Cloud SDK 工具。您需要将entrypointCloud Build 清单中的覆盖为/bin/bash或其他一些 shell,并将路径作为参数传递给您的脚本。
  • 正如 DazWilkin在评论中指出的那样,Cloud Build 服务帐户也需要compute.instances.list列出实例的权限。

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

相关的谷歌文档

于 2018-09-03T20:17:57.507 回答