Ключевые понятия: workflow, job, step, action, runner

Разбираем словарь GitHub Actions, без которого дальше будет каша в голове.

Workflow — это автоматизированный процесс, описанный в одном YAML-файле; он состоит из одного или нескольких jobs, каждый из которых — последовательность steps.

Иерархия сущностей

Вся модель GitHub Actions — это матрёшка из пяти понятий. Запомните вложенность:

ПонятиеЧто это
WorkflowВесь процесс целиком, один .yml-файл. Реагирует на события.
JobГруппа шагов, выполняется на отдельном раннере. Jobs по умолчанию идут параллельно.
StepОдин шаг внутри job: либо запуск команды (run), либо вызов экшена (uses).
ActionПереиспользуемый блок логики, который подключают через uses (например, checkout).
RunnerМашина (VM или контейнер), на которой выполняется job. GitHub даёт ubuntu, windows, macos.

Как они связаны

Workflow содержит jobs. Каждый job выполняется на своём runner и состоит из steps. Step либо вызывает action (uses), либо выполняет shell-команду (run). Важная деталь: каждый job стартует на чистой машине и по умолчанию не делит файлы с другими jobs — между ними данные передают через артефакты или зависимости.

Минимальный пример со всеми понятиями

Ниже — крошечный workflow, где видно сразу всё: триггер, один job, runner и два step (один — action, другой — команда).

name: Привет CI
on: push

jobs:
  greet:                      # это job
    runs-on: ubuntu-latest    # это runner
    steps:
      - uses: actions/checkout@v4   # step через action
      - run: echo "Сборка проекта"  # step через команду

Здесь greet — единственный job, он выполняется на runner ubuntu-latest, внутри два step: первый подключает готовый action actions/checkout, второй просто печатает строку командой.

Steps: run против uses

Это два кита, на которых стоят все шаги:

  • uses: owner/repo@version — подключить чужой (или свой) action из репозитория.
  • run: команда — выполнить shell-команду на runner.

Один step может быть только одним из двух — нельзя совмещать uses и run в одном шаге.

Итог

  • Вложенность: workflow → jobs → steps; jobs живут на runners, steps вызывают actions или команды.
  • Jobs по умолчанию параллельны и изолированы друг от друга.
  • uses подключает action, run выполняет команду — в одном шаге что-то одно.
Проверьте себя
1. Какая иерархия сущностей в GitHub Actions верна?
Astep → job → workflow
Bworkflow → jobs → steps
Crunner → workflow → action
Daction → workflow → job
2. Что выполняет step с ключом uses?
AЗапускает произвольную shell-команду
BПодключает переиспользуемый action из репозитория
CСоздаёт новый runner
DОпределяет триггер workflow
3. Как по умолчанию связаны разные jobs одного workflow по файлам?
AДелят одну общую файловую систему
BКаждый job стартует на чистом изолированном runner и не видит файлы других jobs
CВсе jobs всегда выполняются строго последовательно
DJobs не могут существовать в одном workflow
Поддержать проект