Continuous Deployment — расширение Continuous Delivery: каждый коммит, прошедший автоматические тесты, автоматически деплоится в продакшен. Нет ручного этапа «нажать кнопку деплой» — система сама принимает решение на основе результатов тестов.
Как работает
Пайплайн CD: коммит в репозиторий → запуск тестов (unit, integration, e2e) → при 100% прохождении → сборка артефакта (Docker-образ, JAR, npm bundle) → автоматический деплой на production. Общее время: 5-15 минут для большинства проектов.
Стратегии деплоя: Blue-Green (переключение между двумя идентичными окружениями), Canary (постепенное переключение трафика — 1% → 10% → 100%), Rolling Update (замена экземпляров по одному). Автоматический rollback при росте error rate.
Инструменты: GitHub Actions, GitLab CI/CD, CircleCI, ArgoCD (GitOps для Kubernetes), Spinnaker (Netflix). Для Kubernetes — GitOps через ArgoCD: состояние кластера синхронизируется с Git-репозиторием автоматически.
История
Термин Continuous Deployment введён Тимоти Фитцем (Timothy Fitz) в 2009 году в статье про IMVU. Flickr публично описал деплой 10 раз в день в 2009 году. Netflix использует Spinnaker для тысяч деплоев в день. Jez Humble и David Farley систематизировали практику в книге «Continuous Delivery» (2010).
Continuous Deployment vs Continuous Delivery
- Continuous Integration: автоматическая сборка и тестирование каждого коммита.
- Continuous Delivery: артефакт готов к деплою в любой момент, но требует ручного одобрения.
- Continuous Deployment: артефакт деплоится автоматически без ручного шага.
Связь с хостингом
CD требует инфраструктуры, поддерживающей zero-downtime деплой: Kubernetes с rolling updates, либо несколько VPS за балансировщиком нагрузки. На одиночном VPS CD реализуется через rsync + reload nginx без перезапуска (graceful reload).
Ключевые отличия от похожих терминов
CI/CD — общее название для практик непрерывной интеграции и доставки. Continuous Deployment — наиболее автоматизированная форма CD. Подходит для продуктов с высоким тестовым покрытием; для сложных корпоративных систем с compliance-требованиями CD с ручным одобрением предпочтительнее.
Continuous Integration vs Delivery vs Deployment
CI (Integration): автоматические тесты при каждом push. CD (Delivery): автоматическая подготовка к деплою, ручное нажатие. CD (Deployment): автоматический деплой на production без ручного вмешательства. Full CD (Deployment) применяют при хорошем покрытии тестами (>80%) и зрелых процессах.
Инструменты CI/CD
GitHub Actions: YAML-конфиг в .github/workflows. CircleCI: облачный, популярен для Node.js. GitLab CI: встроен в GitLab. Jenkins: self-hosted, максимальная гибкость. ArgoCD: GitOps для Kubernetes. Flux: альтернатива ArgoCD.
CD для VPS
Простой деплой через GitHub Actions: SSH-сессия → git pull → systemctl restart. Более надёжный: Docker pull → docker-compose up -d. Zero-downtime: Blue-Green или rolling update. Rollback: переключение Nginx на предыдущую версию директории/контейнера.