Условное выполнение и зависимости заданий
Управляйте запуском шагов и заданий с помощью условий if, ключевого слова needs, выражений и функций проверки статуса в рабочих процессах GitHub Actions
«Условное выполнение и зависимости заданий» — бесплатный урок CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CI/CD with GitHub Actions & DevOps Pipelines, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Почему важны условия
Не каждый шаг должен выполняться каждый раз. Например, Вы можете захотеть запускать шаг развёртывания только для ветки main, а шаг уведомления — только после сбоя.
GitHub Actions позволяет добавить условие if к любому шагу или заданию, чтобы управлять его выполнением.
Ключ if
Добавьте к шагу ключ if:. Шаг выполняется только тогда, когда выражение принимает значение истина.
Выражения внутри if не требуют обёртки ${{ }}, хотя использовать её разрешено.
steps:
- name: Deploy
if: github.ref == 'refs/heads/main'
run: ./deploy.shКонтекстные объекты
Условия считываются из контекстных объектов, описывающих запуск:
github— событие, ссылка, инициатор, shaenv— переменные окруженияjobиsteps— состояние предыдущей работыrunner— OS и архитектура
Например, github.event_name сообщает, было ли выполнение запущено отправкой изменений или запросом на слияние.
Функции проверки состояния
По умолчанию шаг пропускается, если предыдущий шаг завершился ошибкой. Чтобы изменить это поведение, используйте функции проверки состояния:
success()— истина, если ни один предыдущий шаг не завершился ошибкой (значение по умолчанию)failure()— истина, если какой-либо предыдущий шаг завершился ошибкойalways()— выполняется в любом случаеcancelled()— истина, если запуск был отменён
- name: Notify on failure
if: failure()
run: echo 'Build failed, sending alert'Всегда выполнять очистку
Распространённый шаблон — шаг очистки, который должен выполняться даже при сбое предыдущих шагов. Используйте if: always().
Это гарантирует обработку временных ресурсов, контейнеров или отчётов о тестировании независимо от результата.
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: logs
path: ./logsЗависимости заданий с needs
Ключевое слово needs заставляет одно задание ждать завершения других. Без него задания выполняются параллельно.
Задание, указанное в needs, должно успешно завершиться до запуска зависимого задания.
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- run: ./deploy.shНесколько зависимостей
Задание может зависеть от нескольких заданий, если передать список в needs. Оно будет ждать завершения всех этих заданий.
Так создаются схемы объединения потоков: итоговое задание выполняется только после успешного завершения всех параллельных заданий.
release:
needs: [lint, test, build]
runs-on: ubuntu-latest
steps:
- run: echo 'all checks passed'Условные задания
Ключ if работает и на уровне заданий, а не только шагов. Условие на уровне задания определяет, будет ли выполнено всё задание.
Здесь задание развёртывания выполняется только при отправке изменений в main, сохраняя при этом зависимость от тестов.
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- run: ./deploy.shИспользование результатов заданий
Задания могут передавать данные последующим заданиям через outputs. Зависимое задание считывает их из контекста needs.
Это позволяет связать условие со значением, вычисленным ранее, например с информацией о том, изменилась ли версия.
check:
runs-on: ubuntu-latest
outputs:
changed: ${{ steps.diff.outputs.changed }}
steps:
- id: diff
run: echo 'changed=true' >> $GITHUB_OUTPUTОбъединение условий
Вы можете объединять выражения с помощью && (и), || (или) и ! (не).
Этот пример выполняется только при успешной отправке изменений в основную ветку, выполненной не из ответвления.
if: success() && github.ref == 'refs/heads/main' && github.event_name == 'push'Всегда выполнять с if и needs
Будьте внимательны: задание с needs пропускается, если зависимое задание завершается ошибкой. Чтобы итоговое задание формирования отчёта выполнялось в любом случае, объедините needs с if: always().
Внутри него можно проверить needs.<job>.result, чтобы определить, что именно включить в отчёт.
report:
needs: [test, build]
if: always()
runs-on: ubuntu-latest
steps:
- run: echo ${{ needs.test.result }}Быстрая проверка
Проверьте, насколько хорошо вы понимаете условное выполнение.
Повторение
Вы научились управлять ходом рабочего процесса с помощью условий и зависимостей.
ifуправляет выполнением шагов и заданий на основе выражений- Функции проверки состояния, такие как
failure()иalways(), отменяют пропуск после ошибки needsзадаёт порядок выполнения и схемы объединения потоковoutputsзаданий передают значения в последующие условия
Эти примитивы позволяют создавать точные и эффективные конвейеры.
Часто задаваемые вопросы
Урок «Условное выполнение и зависимости заданий» бесплатный?
Да — полный текст урока «Условное выполнение и зависимости заданий» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CI/CD with GitHub Actions & DevOps Pipelines, подпишись на CoddyKit PRO. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Чему я научусь в уроке «Условное выполнение и зависимости заданий»?
Управляйте запуском шагов и заданий с помощью условий if, ключевого слова needs, выражений и функций проверки статуса в рабочих процессах GitHub Actions Ты практикуешь CI/CD with GitHub Actions & DevOps Pipelines с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CI/CD with GitHub Actions & DevOps Pipelines?
Предыдущий опыт не требуется. CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Условное выполнение и зависимости заданий»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CI/CD with GitHub Actions & DevOps Pipelines?
Да. Каждый урок CI/CD with GitHub Actions & DevOps Pipelines включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Матричные сборки для нескольких сред
- Кэширование зависимостей для ускорения
- Повторно используемые рабочие процессы и действия
- Условное выполнение и зависимости заданий