Как я могу сохранить вывод текста шага сборки Google Cloud в файл

Я пытаюсь использовать сборку Google Cloud. На одном этапе мне нужно получить список всех запущенных вычислительных экземпляров.

- 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. Создайте образ gcloud на основе ubuntu
  2. Использовал это изображение для запуска файла пользовательского скрипта list-gce.sh
  3. list-gce.sh вызывает gcloud compute instances list

Для получения дополнительной информации вы можете проверить эту суть: https://gist.github.com/mahmoud-samy/e67f141e8b5d553de68a58a30a432ed2

К сожалению, я получил эту странную ошибку:

ред. 1

ОШИБКА: (gcloud) неопознанные аргументы: список (вы имели в виду «список»?)

ревизия 2

ОШИБКА: (gcloud) неопознанные аргументы: --version (вы имели в виду --version?)

Есть предложения или рекомендации?


person Mahmoud Samy    schedule 03.09.2018    source источник
comment
у меня работает gcloud version | tee /dev/stderr > gcloud_version.txt   -  person Kaskasi    schedule 20.03.2019


Ответы (2)


В дополнение к другим ответам, чтобы сделать cmd > foo.txt, вам необходимо переопределить точку входа сборки на bash (или sh):

- name: gcr.io/cloud-builders/gcloud
  entrypoint: /bin/bash
  args: ['-c', 'gcloud compute instances list > gce-list.txt']
person Ahmet Alp Balkan    schedule 05.09.2018
comment
что делать, если контейнер построен с нуля и на нем не установлено даже bash или sh? Пример случая github.com/anchore/syft/blob/main/Dockerfile - person Utkarsh Sharma; 14.04.2021

Эти команды не выполняются в оболочке, поэтому операции оболочки, такие как каналы (|) и перенаправления (>), недоступны.


Обходной путь

Используйте gcloud контейнер, который имеет оболочку. Контейнер gcr.io/cloud-builders/gcloud должен иметь bash, так как он, в конечном итоге, norefile.slim"> производный от norefile. a> из образа Ubuntu 16.04.

В последовательности задач Cloud Build выполните сценарий оболочки, который выполняет gcloud вызовы за вас и перенаправляет вывод в файл. Здесь есть некоторые наблюдения:

Каталог /workspace монтируется во все контейнеры Cloud Build, и его содержимое будет сохраняться между последующими этапами сборки и доступно для них. Если на последующих этапах сборки требуется вывод команды gcloud или ее постобработанная версия, вы можете записать ее здесь.

Соответствующая документация Google.

person Cosmic Ossifrage    schedule 03.09.2018
comment
Учетной записи службы Cloud Build потребуется compute.instances.list (roles/compute.viewer), а на этапе сборки потребуется переопределить cloud-builders/gcloud точку входа, например, /bin/bash, чтобы получить оболочку. - person DazWilkin; 04.09.2018
comment
@DazWilkin Я не хотел, чтобы ответ был полным пошаговым описанием, но это хорошие моменты, и я отредактирую их соответствующим образом. - person Cosmic Ossifrage; 04.09.2018
comment
Извинения. Ваш ответ хороший и исчерпывающий. Я подозреваю, что изменение IAM было бы непонятно другим читателям. - person DazWilkin; 04.09.2018