Ответ
В GitLab CI/CD для этого используется предопределенная переменная CI_PIPELINE_SOURCE. Если её значение равно web, chat или external_pull_request_event, это указывает на ручной запуск через интерфейс. Наиболее надежный способ — проверка на web.
Пример в .gitlab-ci.yml:
manual_job:
script:
# Проверяем, что пайплайн запущен через веб-интерфейс (кнопка "Run pipeline")
- |
if [ "$CI_PIPELINE_SOURCE" == "web" ]; then
echo "Запуск выполнен вручную через веб-интерфейс."
# Логика для ручного запуска, например, развертывание в production
./deploy-to-prod.sh
else
echo "Автоматический запуск. Пропускаем деплой в prod."
fi
rules:
# Джоба будет доступна для ручного запуска, но также может запуститься автоматически
- when: manual
allow_failure: false
Другие распространенные значения CI_PIPELINE_SOURCE:
push: Запуск по пушу в ветку.merge_request_event: Запуск при создании/обновлении MR.schedule: Запуск по расписанию.api: Запуск через API.trigger: Запуск через pipeline trigger token.pipeline: Запуск из другого пайплайна (parent/child).
Для более тонкого контроля можно также использовать переменную CI_JOB_MANUAL (будет true для джоб с when: manual), но она не различает способ запуска самой джобы.