web-dev-qa-db-ja.com

GoogleCloudビルドステップのテキスト出力をファイルに保存するにはどうすればよいですか

Google CloudBuildを使用しようとしています。あるステップで、実行中のすべてのコンピューティングインスタンスのリストを取得する必要があります。

- 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」を意味しましたか?)

何か提案や参考資料はありますか?

9
Mahmoud Samy

他の回答に加えて、cmd > foo.txtを実行するには、ビルドエントリポイントをbash(またはsh)にオーバーライドする必要があります。

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

これらのコマンドはシェルでは実行されないため、パイプ(|)やリダイレクト(>)などのシェル操作は使用できません。


Workaround

シェルを持っているgcloudコンテナを使用します。 gcr.io/cloud-builders/gcloudコンテナにはbashが必要です。これは、最終的にはUbuntu 16.04イメージから 派生 であるためです。

Cloud Buildタスクシーケンスで、gcloud呼び出しを実行し、出力をファイルにリダイレクトするシェルスクリプトを実行します。これにはいくつかの所見があります。

  • シェルスクリプトを適切な場所に保存する必要があります。おそらくソースリポジトリにあるので、ビルドで利用できるようになります。
  • gcloudコンテナは引き続き使用できます。これにより、スクリプトでGoogle CloudSDKツールを使用できるようになります。 CloudBuildマニフェストのentrypoint/bin/bashまたはその他のシェルにオーバーライドし、スクリプトへのパスを引数として渡す必要があります。
  • DazWilkinが コメントで を識別すると、CloudBuildサービスアカウントにはインスタンスを一覧表示するためのcompute.instances.list権限も必要になります。

/workspaceディレクトリはすべてのクラウドビルドコンテナにマウントされ、その内容は後続のビルドステップ間で保持され、その後のビルドステップからアクセスできます。 gcloudコマンドの出力、または後処理されたバージョンが後続のビルドステップで必要な場合は、ここに書き出すことができます。

関連 Googleドキュメント

1