Reputation: 2852
I'm trying to use google cloud build. At one step, I need to get a list of all running compute instances.
- name: gcr.io/cloud-builders/gcloud
args: ['compute', 'instances', 'list']
and it works fine. Problem starts when I tried to save the output to a file
Trial 1: failed
- name: gcr.io/cloud-builders/gcloud
args: ['compute', 'instances', 'list', '> gce-list.txt']
Trial 2: failed
- name: gcr.io/cloud-builders/gcloud
args: ['compute', 'instances', 'list', '>', 'gce-list.txt']
Trial 3: failed
- name: gcr.io/cloud-builders/gcloud
args: >
compute instances list > gce-list.txt
Trial 4: failed
- name: gcr.io/cloud-builders/gcloud
args: |
compute instances list > gce-list.txt
UPDATE: 2018-09-04 17:50
Trial 5: failed
gcloud compute instances list
For more details you can check this gist: https://gist.github.com/mahmoud-samy/e67f141e8b5d553de68a58a30a432ed2
Unfortunately I got this strange error:
rev 1
ERROR: (gcloud) unrecognized arguments: list (did you mean 'list'?)
rev 2
ERROR: (gcloud) unrecognized arguments: --version (did you mean '--version'?)
Any suggestions, or references?
Upvotes: 18
Views: 8937
Reputation: 45214
In addition to other answers, to do cmd > foo.txt
, you need to override the build entrypoint to bash (or sh):
- name: gcr.io/cloud-builders/gcloud
entrypoint: /bin/bash
args: ['-c', 'gcloud compute instances list > gce-list.txt']
Upvotes: 25
Reputation: 5379
Those commands are not executed in a shell, so shell operations such as pipes (|
) and redirections (>
) are not available.
Use a gcloud
container which does have a shell. The gcr.io/cloud-builders/gcloud
container should have bash
, as it is ultimately derived from an Ubuntu 16.04 image.
In your Cloud Build task sequence, execute a shell script which performs the gcloud
calls for you and redirects the output to a file. This has some observations:
gcloud
container can still be used, as this will ensure the Google Cloud SDK tools are available to your script. You will need to override the entrypoint
in the Cloud Build manifest to be /bin/bash
, or some other shell, and pass the path to your script as an argument.compute.instances.list
permission to list instances.The /workspace
directory is mounted into all Cloud Build containers and its contents will be persisted between and accessible from subsequent build steps. If the output of the gcloud
command, or a post-processed version, is require by subsequent build steps, you can write it out here.
Relevant Google documentation.
Upvotes: 5