Ответ
Пайплайн CI/CD обычно запускается автоматически при наступлении определенных событий в системе контроля версий (VCS). Основные триггеры:
-
Изменения в коде:
- Push в целевую ветку (например,
main,develop). - Создание или обновление Pull Request / Merge Request.
- Push определенного тега (
git tag).
- Push в целевую ветку (например,
-
Ручной запуск: Пользователь вручную запускает пайплайн через UI (например, кнопка "Run pipeline") или API.
-
По расписанию (Scheduled/Pipeline schedules): Запуск в заданное время (по аналогии с cron), например, для ночных сборок или регрессионных тестов.
-
Внешние события (Webhooks/API):
- Вебхук из внешней системы (например, Jira, Slack).
- Прямой вызов API CI/CD-системы.
Пример конфигурации (GitLab CI):
stages:
- test
- build
- deploy
# Запускается только для пуша в main и для MR
unit_tests:
stage: test
script:
- run_tests.sh
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
# Запускается только вручную или по расписанию для main
deploy_to_staging:
stage: deploy
script:
- deploy.sh staging
rules:
- if: $CI_COMMIT_BRANCH == "main" && ($CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_SOURCE == "web")
when: manual # Требует ручного подтверждения Ответ 18+ 🔞
А, ну это ж про то, когда у тебя эта, блядь, магия начинается сама по себе! Пайплайн, сука, как бешеный хомяк в колесе, стартует. А кто его, блядь, на кнопку жмёт? Да никто, ёпта! Он сам, хитрая жопа!
Смотри, основные способы его разбудить, блядь:
-
Кодом пошевелил. Ну, классика, блядь.
- Запушил в главную ветку (
main) — тут же, сука, все джобы проснулись, как будто им сигнал тревоги дали. В рот меня чих-пых! - Пулл-реквест создал или обновил — система сразу: "Ага, щас проверим, что этот умник накодил, не насрал ли он в код".
- Тег накатил (
git tag) — типа, "ой, всё, релиз!", пайплайн такой: "Ну давай, покажись, чё там у тебя".
- Запушил в главную ветку (
-
Ручной запуск. Это когда сам, как мудак, лезешь в интерфейс, ищешь эту ебучую кнопку "Запустить" и тыкаешь на неё пальцем. Либо через API стучишься. Бывает же, блядь, надо вне очереди.
-
По будильнику (Scheduled). Вообще охуенно! Ставишь ему, как коту сука собаке, расписание: "Каждый день в 3 ночи — собирай и тестируй". Проснётся, всё сделает, отчитается. Автомат, блядь!
-
Извне припёрли (Webhooks/API). Вот это уже высший пилотаж, ёпта. Какая-нибудь Jira пишет: "Задача закрыта!" — и бац, вебхук в CI/CD, пайплайн стартует на деплой. Или твой коллега в слаке команду
/deployнаписал — и понеслась. Удивление пиздец!
А вот, смотри, как это в конфиге выглядит, чтоб ты, блядь, не обосрался. Код не трогаю, он святой:
stages:
- test
- build
- deploy
# Тесты будут бегать ТОЛЬКО когда пушишь в main ИЛИ когда создаёшь мерж-реквест. Умно, блядь!
unit_tests:
stage: test
script:
- run_tests.sh
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
# А этот деплой — хитрая жопа. Только для main, но ТОЛЬКО если пайплайн запустили по расписанию или вручную (web).
# И даже тогда он встанет и скажет: "Чувак, бля, подтверди действие, а то я сейчас всё на прод вылью". when: manual — это гениально!
deploy_to_staging:
stage: deploy
script:
- deploy.sh staging
rules:
- if: $CI_COMMIT_BRANCH == "main" && ($CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_SOURCE == "web")
when: manual # Стоит и ждёт, пока ему пальцем кивнут. Безопасность, мать его!
Вот и вся магия, блядь. Настроил правила — и спи спокойно. А он там сам разберётся, когда ему бегать, а когда на хуй посылать твои коммиты.