Несколько команд на одном этапе сборки в Google Cloud Builder

Я хочу запустить наш автоматизированный набор серверных тестов в среде Google Cloud Builder. Однако, естественно, я столкнулся с необходимостью установки различных зависимостей и предварительных условий в Cloud Builder, чтобы наш последний тестовый прогон (php tests/run) мог работать.

Вот мой текущий cloudbuild.yaml:

steps:

  - name: 'ubuntu'
    args: ['bash', './scripts/install-prerequisites.sh', '&&', 'composer install -n -q --prefer-dist', '&&', 'php init --overwrite=y', '&&', 'php tests/run']

На данный момент объединение нескольких команд в цепочку не работает. Выполняется только часть bash ./scripts/install-prerequisites.sh. Как мне заставить все эти команды выполняться по порядку?


person Dzhuneyt    schedule 26.04.2019    source источник


Ответы (3)


На данный момент, я считаю, у вас есть 2 варианта достижения этого:

  1. создайте сценарий с нужной последовательностью команд и вызовите сценарий напрямую:
# cloudbuild.yaml
steps:
  - name: 'ubuntu'
    args: ['./my-awesome-script.sh']
# my-awesome-script.sh
/usr/bin/env/bash

set -eo pipefail

./scripts/install-prerequisites.sh
composer install -n -q --prefer-dist
php init --overwrite=y
php tests/run
  1. Вызовите bash -c со всеми командами, которым вы хотите следовать:
steps:
  - name: 'ubuntu'
    args: ['bash', '-c', './scripts/install-prerequisites.sh && composer install -n -q --prefer-dist && php init --overwrite=y && php tests/run']
person Gustavo Hoirisch    schedule 14.05.2019
comment
Автор вопроса: для будущих читателей именно эта трудность заставила меня перейти на Github Actions. Попробуйте и сами. Отблагодаришь позже. - person Dzhuneyt; 23.11.2019
comment
Вариант №1 требует bash, например. args: ['bash', './scripts/install-prerequisites.sh'] работает. См. cloud.google.com/cloud-build/docs/create. -custom-build-steps - person ruhong; 17.02.2020

Более удобочитаемым способом запуска сценария может быть использование синтаксиса прорыва (источник: освоение синтаксиса облачной сборки)

steps:
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    ./scripts/install-prerequisites.sh \
    && composer install -n -q --prefer-dist \
    && php init --overwrite=y \
    && php tests/run

Однако это работает только в том случае, если в вашем образе шага сборки установлены соответствующие deps (php, composer).

person guille    schedule 25.06.2019
comment
Это не сработает, если у вас будет больше шагов после этого? - person Faraji Anderson; 31.07.2020
comment
Можете ли вы привести пример того, что вы пытаетесь сделать? На каждом этапе сборки вытягивается исходный контейнер. Если вы хотите повторно использовать контейнер ubuntu из этого примера с предварительными требованиями, установленными на нескольких этапах, я бы предложил создать и отправить этот пользовательский образ и вместо этого ссылаться на него. - person guille; 04.08.2020

Видеть:

По умолчанию шаги сборки выполняются последовательно, но вы можете настроить их для одновременного выполнения.

Порядок шагов сборки в поле шагов относится к порядку, в котором они выполняются. Шаги будут выполняться последовательно или одновременно в зависимости от зависимостей, определенных в их полях waitFor.

Шаг зависит от каждого идентификатора в его waitFor и не запускается, пока каждая зависимость не завершится успешно.

Таким образом, вы отделяете команду только от каждого шага.

Нравится.

steps:
  - name: 'ubuntu'
    args: ['bash', './scripts/install-prerequisites.sh']
    id: 'bash ./scripts/install-prerequisites.sh'
  - name: 'ubuntu'
    args: ['composer', 'install', '-n', '-q', '--prefer-dist']
    id: 'composer install -n -q --prefer-dist'
  - name: 'ubuntu'
    args: ['php', 'init', '--overwrite=y']
    id: 'php init --overwrite=y'
  - name: 'ubuntu'
    args: ['php', 'tests/run']
    id: 'php tests/run'

Кстати, можно ли с помощью образа ubuntu запустить команду php и composer?

Я думаю, что вам следует использовать или создать образ докера, который может запускать команду php и composer.

Образ докера композитора находится здесь.

steps:
- name: 'gcr.io/$PROJECT_ID/composer'
  args: ['install']

person zkohi    schedule 26.04.2019
comment
Запуск команд в виде отдельных шагов сборки невозможен, потому что каждый из них выполняется в чистой среде ubuntu. Они не наследуют установленный программный стек друг друга. - person Dzhuneyt; 26.04.2019
comment
Тогда как они могут это предположить? cloud.google.com/cloud-build/docs/building/ Где сборка зависит от установки? @ Джунейт - person vonGohren; 25.09.2020