Базовые шаги

Тема дорожной карты · GitHub Actions

Шаги (steps) — наименьшие исполняемые единицы внутри job в GitHub Actions. Каждый step либо выполняет shell-команду через ключ run:, либо вызывает повторно используемый action через ключ uses: в рамках CI/CD-пайплайна. Каждый step в workflow GitHub Actions выполняется последовательно в одной и той же среде runner, разделяя файловую систему рабочего пространства и переменные окружения, объявленные на уровне job или workflow. Step с run: поддерживает многострочные shell-скрипты через блочный скаляр |, позволяя реализовывать сложную логику непрерывной интеграции — сборку, тестирование и упаковку — в рамках одного этапа пайплайна. Шагам можно задавать имена через ключ name: для читаемых логов workflow, а их выходные данные можно захватывать и передавать последующим шагам через контекстные выражения вида ${{ steps.<step-id>.outputs.<name> }}. Следуя лучшим практикам GitHub Actions, держите шаги сфокусированными на единственной ответственности, чтобы пайплайны оставались поддерживаемыми, и используйте условия if: для пропуска шагов в зависимости от ветки, типа события или результатов предыдущих шагов.

Как это работает

Базовые шаги: uses: actions/checkout@v4 (клон репо), uses: actions/setup-node@v4 / setup-python@v5 / setup-go@v5 и т.д. (toolchain), run: (shell-команда — bash на Linux/Mac, pwsh на Windows по дефолту). Multi-line скрипты — run: |. Cross-step state: пишите в $GITHUB_OUTPUT / $GITHUB_ENV для передачи значений следующим step в том же job. Условное исполнение через if:.

Когда применять

Всегда начинайте с checkout (actions/checkout@v4); без него workflow без исходников. setup-* actions — для языко-специфичных toolchain (они обрабатывают кеш). actions/cache — для кеша зависимостей (~/.npm, ~/.cargo, ~/.gradle, ~/.m2). Heredocs в run — для multi-line скриптов; держите шаги сфокусированными.

Типичные ошибки

Ловушки Базовые шаги: не указали fetch-depth: 0, когда нужна полная история для blame/log/tag-detection; дорогие шаги безусловно (используйте if: для skip на docs-only изменениях); баги shell-эскейпинга в run: | (закавычьте переменные — "$VAR", не $VAR); state через файлы в /tmp между шагами (используйте $GITHUB_ENV правильно).

Связанные понятия

Полезные ресурсы