← Назад к вопросам

Как workflows используются в .gitlab-ci.yml для настройки CI/CD

2.0 Middle🔥 251 комментариев
#CI/CD и автоматизация#Git и системы контроля версий

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Workflows в GitLab CI/CD: Контроль потока выполнения

В GitLab CI/CD workflows — это ключевой механизм для управления условиями запуска pipeline на уровне всего процесса, а не отдельных jobs. Это позволяет гибко определять, когда и как pipeline должен выполняться, основываясь на событиях, ветках, тегах или других параметрах.

Что такое Workflows?

Workflows определяются в корневом ключе .workflow в файле .gitlab-ci.yml. Они задают глобальные правила для запуска всего pipeline. Если условия в workflow не соблюдены, pipeline не запустится, даже если отдельные jobs имеют свои правила rules. Это позволяет централизованно контролировать выполнение CI/CD в зависимости от контекста.

Основные сценарии использования workflows

1. Ограничение выполнения для определенных веток или событий

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH == "main"
      when: always
    - if: $CI_COMMIT_BRANCH == "development"
      when: manual
    - when: never

В этом примере pipeline запускается только для:

  • Merge Request событий Ветки main (автоматически) Ветки development (только вручную) Все остальные случаи блокируются

2. Управление pipeline в зависимости от тегов

workflow:
  rules:
    - if: $CI_COMMIT_TAG
      when: never  # Не запускать pipeline для тегов
    - when: always

3. Комбинация нескольких условий с помощью логических операторов

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "main"'
    - if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_REF_NAME =~ /^release-\d+\.\d+$/'

Ключевые переменные для workflows

Workflows часто используют CI/CD переменные для принятия решений:

  • $CI_PIPELINE_SOURCE — источник pipeline (push, web, merge_request, schedule, etc.)
  • $CI_COMMIT_BRANCH — имя ветки
  • $CI_COMMIT_TAG — имя тега
  • $CI_COMMIT_REF_NAME — имя ref (ветка или тег)
  • $CI_PROJECT_PATH — путь проекта

Различие между workflows и rules в jobs

Важно понимать отличие:

  • Workflows — глобальные правила для всего pipeline. Если workflow блокирует выполнение, ни одна job не запустится.
  • Rules в jobs — локальные правила для отдельных jobs. Они применяются только после того, как workflow разрешил запуск pipeline.

Пример совместного использования:

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE != "schedule"  # Блокировать scheduled pipelines

stages:
  - test
  - deploy

test_job:
  stage: test
  script: echo "Running tests"
  rules:
    - if: $CI_COMMIT_BRANCH == "main"  # Эта job будет запускаться только для main ветки

deploy_job:
  stage: deploy
  script: echo "Deploying"
  rules:
    - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push"

Практические применения workflows в DevOps

  1. Экономия ресурсов: Блокировка pipeline для временных веток или тестовых событий.
  2. Безопасность: Ограничение автоматических деплоев только для определенных веток или после ручного подтверждения.
  3. Организация процессов: Разделение pipeline для разных типов изменений (features, hotfixes, releases).
  4. Интеграция с внешними системами: Использование custom variables для управления выполнением.

Workflows в GitLab CI/CD предоставляют DevOps инженерам мощный инструмент для создания гибких, контролируемых и безопасных процессов автоматизации, позволяя эффективно управлять ресурсами и соблюдать политики компании.