Ответ
Триггер в GitLab CI/CD — это событие или действие, которое инициирует выполнение пайплайна. Управление триггерами — ключевая часть настройки гибких процессов доставки в DevOps.
Основные типы триггеров:
-
Push-триггеры (автоматические): Срабатывают при событиях в репозитории.
push: Коммит в ветку.merge_request: Создание или обновление MR.tag_push: Создание тега.
-
Ручные триггеры (Manual): Запускаются пользователем через UI GitLab или API. Полезны для развертывания в прод.
deploy_to_production: stage: deploy script: ./scripts/deploy-prod.sh environment: production when: manual # Будет кнопка "Play" в интерфейсе only: - main # Запускать только из ветки main -
Триггеры по расписанию (Pipeline Schedules): Автоматический запуск по cron-расписанию (например, ночные тесты, обновление зависимостей).
-
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-файл
Грамотная настройка триггеров позволяет создать эффективный пайплайн: автоматические тесты на каждый коммит, ручное утверждение для продакшена и интеграцию с внешними системами.