0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Урок

Условное выполнение и зависимости заданий

Управляйте запуском шагов и заданий с помощью условий 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 — событие, ссылка, инициатор, sha
  • env — переменные окружения
  • 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 — локальная установка не требуется.

Все уроки этого курса

  1. Матричные сборки для нескольких сред
  2. Кэширование зависимостей для ускорения
  3. Повторно используемые рабочие процессы и действия
  4. Условное выполнение и зависимости заданий
← Назад к CI/CD with GitHub Actions & DevOps Pipelines