Какие события обычно запускают выполнение CI/CD пайплайна автоматически?

Ответ

CI/CD пайплайн автоматически запускается по триггерам — событиям в системе контроля версий или по расписанию. Это основа практик непрерывной интеграции и доставки.

Основные триггеры автоматического запуска:

  1. Push в определённые ветки: Чаще всего при пуше в main, master или develop. Это гарантирует, что каждая интеграция кода проверяется.

    # .gitlab-ci.yml пример
    test:
      script: echo "Running tests..."
      only:
        - main        # Запуск при пуше в main
        - develop     # Запуск при пуше в develop
  2. Создание или обновление Pull/Merge Request (PR/MR): Запуск пайплайна для проверки кода перед слиянием. Часто включает этапы сборки, тестирования и линтинга.

    # .github/workflows/ci.yml пример для GitHub Actions
    on:
      pull_request:
        branches: [ main, develop ]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - run: npm test
  3. По расписанию (Scheduled/Cron): Запуск ночных регрессий, нагрузочных тестов или задач обслуживания.

    # GitLab CI: ночной запуск полного тестового набора
    nightly_regression:
      script: ./run_full_test_suite.sh
      rules:
        - if: $CI_PIPELINE_SOURCE == "schedule" # Триггер по расписанию
  4. Внешние события (Webhook): Запуск из внешних систем, например, при обновлении зависимости в артефакт-репозитории или по результатам другого пайплайна.

Важно: Настройка правильных триггеров предотвращает "сгорание" ресурсов (например, запуск тяжёлого пайплайна на каждый пуш в feature-ветку) и обеспечивает своевременную обратную связь.

Ответ 18+ 🔞

Да ты посмотри, какая хитрая жопа у этих CI/CD пайплайнов! Они ж не просто так, как дураки, по десять раз на дню запускаются. Нет, блядь, у них тут целая система, как у шпионов — ждут своего триггера, сука, сигнала!

Вот представь: сидит пайплайн, бздит тихонечко, и вдруг — раз! — ему в душу бога мать, событие какое-то прилетело. И он такой: «А, ну всё, понеслась, сейчас я вам покажу непрерывную интеграцию, мать вашу!»

Основные способы его раскачать, этого спящего красавца:

  1. Кто-то пушнул в святые ветки. Обычно в main или develop. Это святое, блядь! Туда чихнуть нельзя, а уж пушнуть — так сразу вся обойма проверок выезжает. Типа: «А ну-ка, покажи, что ты там, сука, накодил?»

    # .gitlab-ci.yml пример
    test:
      script: echo "Запускаю тесты, а то мало ли чё..."
      only:
        - main        # Ткнули в main — получите распишитесь
        - develop     # И сюда ткнули — тоже получите
  2. Кто-то Merge Request создал. Ага, хочешь своё творение в основную ветку впендюрить? Сначала, дружок, пройди все круги ада — сборку, тесты, линтинг. Пайплайн тебя проверит на вшивость.

    # GitHub Actions, например
    on:
      pull_request: # Внимание, все на выход! Кто-то хочет мержиться!
        branches: [ main, develop ]
    jobs:
      test:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v3
          - run: npm test # Не пройдёшь — иди нахуй со своим кодом
  3. По будильнику (Cron). Это как ночной дежурный, ёпта. Все спят, а он в три часа нощи поднимается и начинает: «А давайте-ка я полный регресс гонану, на всякий случай!» Спокойной ночи, ресурсы.

    # GitLab CI
    nightly_regression:
      script: ./run_full_test_suite.sh # Всем пизда, я проснулся!
      rules:
        - if: $CI_PIPELINE_SOURCE == "schedule" # Да, именно по расписанию, а чё?
  4. Извне, по вебхуку. Вообще охуенно! Другая система, ни с того ни с сего, может ему пинка дать. Типа: «Эй, пацан, зависимости обновились, давай собирайся заново, не отлынивай!»

А самое главное, чувак, это не переборщить, а то терпения ноль ебать. Настроить эти триггеры с умом, чтобы он не вздрачивался на каждый чих в какую-нибудь левую ветку feature-petya-test. Иначе ресурсы сгорят, а толку — хуй с горы. Надо, чтобы работало чётко, как часы: по делу — вжжжжух, отработал; не по делу — спит, блядь, и не дергается. Вот и вся магия, в рот меня чих-пых!