Команды run и переменные env
Учимся выполнять собственные команды и передавать им настройки через окружение.
Ключ
runвыполняет команды в shell runner;envзадаёт переменные окружения, доступные этим командам.
Одна команда и много команд
Простой случай — одна команда в строке:
- run: npm test
Несколько команд оформляют блоком через символ | (literal в YAML):
- name: Сборка
run: |
npm ci
npm run build
echo "Готово"
Команды в одном run выполняются в одном shell-процессе и падают на первой же ошибке (по умолчанию включён set -e для bash).
Рабочая директория и shell
По умолчанию команды выполняются в корне склонированного репозитория. Можно сменить директорию и оболочку:
- run: pytest
working-directory: backend
shell: bash
Переменные окружения
env можно задать на трёх уровнях, от широкого к узкому:
| Уровень | Где действует |
| workflow | во всех jobs и steps |
| job | во всех steps этого job |
| step | только в этом шаге |
env:
NODE_ENV: production # уровень workflow
jobs:
test:
runs-on: ubuntu-latest
env:
CI: "true" # уровень job
steps:
- run: echo "$NODE_ENV / $CI"
- run: npm test
env:
LOG_LEVEL: debug # уровень step
Более узкий уровень перекрывает более широкий, если имена совпадают. Обращение к переменной в shell — обычное: $NAME (bash) или %NAME% (cmd).
Передача значения между шагами
Чтобы один шаг «сообщил» значение следующему, пишут в специальный файл $GITHUB_ENV:
- run: echo "VERSION=1.4.2" >> "$GITHUB_ENV"
- run: echo "Версия — $VERSION"
Так значение, вычисленное в первом шаге, становится переменной окружения во всех последующих шагах того же job.
Итог
runзапускает команды; многострочный блок — через|.envработает на уровне workflow/job/step; узкий уровень перекрывает широкий.- Передать значение следующим шагам можно записью в
$GITHUB_ENV.