Ответ
Да, я настраивал различные триггеры в CI/CD системах, в основном в GitHub Actions и GitLab CI. Выбор триггера зависит от конкретной задачи и рабочего процесса.
Вот основные типы триггеров и их применение на моем опыте:
-
При коммите или Pull Request (
on: [push, pull_request])- Задача: Гарантия качества кода. Это основной триггер для запуска тестов, линтинга и сборки приложения при каждом изменении в ветках
main,developили в feature-ветках, на которые создаются Pull Request. - Пример (GitHub Actions):
on: push: branches: [ main ] pull_request: branches: [ main ]
- Задача: Гарантия качества кода. Это основной триггер для запуска тестов, линтинга и сборки приложения при каждом изменении в ветках
-
По расписанию (
on: schedule)- Задача: Выполнение регулярных, фоновых задач.
- Примеры использования:
- Запуск долгих E2E-тестов в ночное время, чтобы не замедлять основной CI.
- Ежедневное сканирование зависимостей на уязвимости.
- Генерация периодических отчетов.
- Пример (ежедневно в 3:00 UTC):
on: schedule: - cron: '0 3 * * *'
-
Вручную (
on: workflow_dispatch)- Задача: Запуск пайплайна по требованию, обычно для контролируемых действий.
- Примеры использования:
- Деплой приложения на
stagingилиproductionокружение. - Запуск ресурсоемкой задачи, например, миграции данных.
- Деплой приложения на
- Пример:
on: workflow_dispatch
-
По событию в репозитории (например, создание тега или релиза)
- Задача: Автоматизация процессов релиза.
- Пример использования: При создании нового тега (например,
v1.2.0) автоматически собирается релизный артефакт, публикуется Docker-образ и создается GitHub Release. - Пример (при создании тега):
on: push: tags: - 'v*.*.*'
В GitLab CI для более сложных условий я использовал директиву rules, которая позволяет гибко комбинировать условия запуска, например: запускать только для тегов И только если переменная окружения установлена.
Ответ 18+ 🔞
Слушай, я тут настраивал эти ваши триггеры в CI/CD, ну, в GitHub Actions и GitLab CI. Ну, блядь, выбор-то зависит от того, какую конкретно задачу решаешь, и как у тебя там рабочий процесс устроен, понимаешь?
Вот, смотри, какие основные типы бывают и где я их применял, на своём горьком опыте:
-
На каждый коммит или Pull Request (
on: [push, pull_request])- Зачем это надо: А вот это, блядь, чтобы качество кода не проёбывать. Основной триггер, сука. Запускаешь тесты, линтинг и сборку каждый раз, когда кто-то что-то закоммитил в
mainилиdevelop, или когда создают Pull Request. Чтобы всякую хуйню не залили, блядь. - Вот, смотри, как это выглядит (GitHub Actions):
on: push: branches: [ main ] pull_request: branches: [ main ]
- Зачем это надо: А вот это, блядь, чтобы качество кода не проёбывать. Основной триггер, сука. Запускаешь тесты, линтинг и сборку каждый раз, когда кто-то что-то закоммитил в
-
По расписанию, как будильник (
on: schedule)- Зачем это надо: Для всяких регулярных, фоновых дел, которые не надо делать на каждом чихе.
- Где я это юзал, ёпта:
- Долгие E2E-тесты гонять ночью, чтобы днём пайплайн не тормозил, как черепаха в сиропе.
- Ежедневно проверять зависимости на дыры, вдруг там какая уязвимость вылезла.
- Отчёты там всякие генерить.
- Пример (каждый день в 3 утра по UTC, чтобы никого не ебало):
on: schedule: - cron: '0 3 * * *'
-
Ручной запуск, по кнопке (
on: workflow_dispatch)- Зачем это надо: Когда нужно всё под контролем, по щелчку пальцев. Не каждый день, а когда сам решил.
- Где пригождалось:
- Деплой на
stagingили, мать его, наproduction. Тут уж точно на авось не понадеешься. - Запустить какую-нибудь тяжёлую хуйню, типа миграции данных, чтобы всё не легло в пизду.
- Деплой на
- Вот так просто:
on: workflow_dispatch
-
По событию в репозитории (типа, создали тег или релиз)
- Зачем это надо: Чтобы автоматизировать весь этот цирк с выпуском версий.
- Как юзал: Создали новый тег, например,
v1.2.0— и тут же автоматом собирается релизный артефакт, Docker-образ выкладывается и релиз в GitHub создаётся. Красота, блядь! - Пример (ловим все теги по маске):
on: push: tags: - 'v*.*.*'
А в GitLab CI, там, блядь, ещё есть такая мощная штука — rules. Она позволяет такие условия накрутить, что мама не горюй! Типа, «запускайся только для тегов И только если вот эта переменная окружения установлена». Гибко, ёпта, очень гибко.