Что такое триггер в GitLab CI/CD?

«Что такое триггер в GitLab CI/CD?» — вопрос из категории CI/CD, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Триггер в GitLab CI/CD — это событие или действие, которое инициирует выполнение пайплайна. Управление триггерами — ключевая часть настройки гибких процессов доставки в DevOps.

Основные типы триггеров:

  1. Push-триггеры (автоматические): Срабатывают при событиях в репозитории.

    • push: Коммит в ветку.
    • merge_request: Создание или обновление MR.
    • tag_push: Создание тега.
  2. Ручные триггеры (Manual): Запускаются пользователем через UI GitLab или API. Полезны для развертывания в прод.

    deploy_to_production:
      stage: deploy
      script: ./scripts/deploy-prod.sh
      environment: production
      when: manual  # Будет кнопка "Play" в интерфейсе
      only:
        - main      # Запускать только из ветки main
  3. Триггеры по расписанию (Pipeline Schedules): Автоматический запуск по cron-расписанию (например, ночные тесты, обновление зависимостей).

  4. API-триггеры (Trigger Tokens): Запуск пайплайна из внешних систем (например, из скрипта мониторинга, Jira или другого CI).

    # Запуск пайплайна через API с переменными
    curl -X POST 
         -F token=PROJECT_TRIGGER_TOKEN 
         -F ref=main 
         -F variables[ENVIRONMENT]=staging 
         -F variables[ROLLBACK]=false 
         "https://gitlab.example.com/api/v4/projects/123/trigger/pipeline"

Продвинутое использование: Условные триггеры с rules:

build_and_test:
  stage: build
  script: ./build.sh
  rules:
    # Запускать при пуше в feature-ветки, но не в main
    - if: $CI_COMMIT_BRANCH =~ /^feature//
    # Запускать при создании Merge Request
    - if: $CI_MERGE_REQUEST_ID
    # Не запускать при пуше в main (для него есть отдельный этап деплоя)
    - if: $CI_COMMIT_BRANCH == "main"
      when: never

# Этап, который запустится ТОЛЬКО если в коммите есть изменения в папке инфраструктуры
deploy_terraform:
  stage: deploy
  script: ./deploy-infra.sh
  rules:
    - changes:
        - terraform/**/*
        - .gitlab-ci.yml  # И если изменился сам CI-файл

Грамотная настройка триггеров позволяет создать эффективный пайплайн: автоматические тесты на каждый коммит, ручное утверждение для продакшена и интеграцию с внешними системами.