Ответ
В современных 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.