Ответ
В современных CI/CD-пайплайнах инициирование деплоя зависит от выбранной стратегии (ручной, автоматический, GitOps). В моей практике использовались следующие подходы.
1. Автоматический деплой по событию в Git (чаще всего для dev/stage):
- В GitLab CI/CD или GitHub Actions пайплайн запускается при push или merge request в определённую ветку (например,
developилиmain). - После успешного прохождения всех стадий (build, test, security scan) автоматически запускается job деплоя.
Пример отрывка из .gitlab-ci.yml:
stages:
- build
- test
- deploy
deploy_to_stage:
stage: deploy
script:
- echo "Deploying to Kubernetes stage cluster..."
- kubectl config use-context stage-cluster
- kubectl apply -f k8s/manifests/ --recursive
rules:
- if: $CI_COMMIT_BRANCH == "develop"
when: manual # Или 'always' для полной автоматизации
2. Ручной запуск деплоя (для production):
- Для продакшн-окружения часто используется ручной запуск (manual job) после code review и approval. В том же GitLab CI это кнопка "Deploy to Prod" в интерфейсе пайплайна.
- Альтернативно — запуск через CLI утилиты CI-системы:
gitlab-runner exec docker deploy_to_prod
3. GitOps-подход (например, с ArgoCD или Flux):
- Деплой инициируется автоматически при изменении манифестов в Git-репозитории. ArgoCD постоянно сравнивает желаемое состояние (описанное в Git) с актуальным в кластере и выполняет синхронизацию.
- Инициировать деплой можно просто сделав git push:
# Обновляем версию образа в kustomization.yaml или Helm values git commit -am "Bump app to v1.2.0" git push origin main # ArgoCD автоматически обнаружит изменение и развернёт новую версию в кластере
4. Запуск через API CI/CD-системы (для интеграций):
- Например, можно запустить деплой из системы мониторинга (при определённом алерте) или чат-бота.
# Пример для GitLab API curl --request POST --form "token=$CI_JOB_TOKEN" --form "ref=main" "https://gitlab.example.com/api/v4/projects/1/trigger/pipeline"
Ключевой принцип: Выбор триггера зависит от требований к безопасности и скорости delivery. Для production обычно используется комбинация автоматических checks и manual approval.
Ответ 18+ 🔞
Слушай, ну вот смотри, вся эта движуха с деплоем — это как выбор, на чём ехать в магазин. Можно пешком, можно на велике, а можно на тачке, но тогда бензина жрёт дохуя. Так и тут: способ запустить эту карусель зависит от того, куда и с какой скоростью тебе надо.
1. Автоматический деплой по пушу в Git (для дев/стейджа — самое то):
- В GitLab CI/CD или GitHub Actions вся эта махина стартует, как только ты заливаешь код в определённую ветку (типа
develop). Всё само прогонит сборку, тесты, проверки, и если всё ок — ёб твою мать, — само же и задеплоит. Красота, а не жизнь.
Пример отрывка из .gitlab-ci.yml:
stages:
- build
- test
- deploy
deploy_to_stage:
stage: deploy
script:
- echo "Deploying to Kubernetes stage cluster..."
- kubectl config use-context stage-cluster
- kubectl apply -f k8s/manifests/ --recursive
rules:
- if: $CI_COMMIT_BRANCH == "develop"
when: manual # Или 'always' для полной автоматизации
2. Ручной запуск (для продакшена — без этого никуда):
- Для прода — тут уже волнение ебать. Чаще всего ставят ручной запуск, эту самую кнопку "Deploy to Prod". Прогнал ревью, всё одобрили — тогда уже жмёшь, герой. Или через консольку, если ты такой весь из себя хардкорный:
gitlab-runner exec docker deploy_to_prod
3. GitOps (ArgoCD, Flux — магия, блядь):
- Это вообще ёперный театр. Ты просто пушишь изменения манифестов в Git, а система, как собака сука преданная, сама всё подхватывает и в кластере синхронизирует. Сделал коммит — и всё, можно пить кофе, деплой уже летит.
# Меняешь версию приложения git commit -am "Bump app to v1.2.0" git push origin main # ArgoCD это увидит и сам всё обновит — ни хуя себе удобство!
4. Запуск через API (для интеграций с другим говном):
- Ну а если ты хочешь, чтобы деплой стартовал от алерта в мониторинге или по команде из чатика — вот тебе API. Дёргаешь запрос, и понеслась.
# Пример для GitLab API curl --request POST --form "token=$CI_JOB_TOKEN" --form "ref=main" "https://gitlab.example.com/api/v4/projects/1/trigger/pipeline"
А главная мысль-то какая? Выбор триггера — это всегда баланс между "ой, как быстро" и "ой, как страшно". Для продакшена доверия ебать ноль, поэтому там ручной контроль или очень строгие автоматические правила. А для всего остального — да похуй, можно и на полном автомате, чтобы голова не болела.