Ответ
Оба термина относятся к этапам автоматизированного пайплайна после Continuous Integration (CI), но ключевое отличие — в степени автоматизации финального шага.
Continuous Delivery (Непрерывная поставка) — это практика, при которой каждая успешная сборка, прошедшая все этапы автоматизированного тестирования, автоматически подготавливается к развертыванию в production-среде. Однако само развертывание требует ручного подтверждения (например, нажатие кнопки "Deploy to Prod").
Continuous Deployment (Непрерывное развертывание) идет на шаг дальше. Здесь каждое изменение, прошедшее пайплайн, автоматически развертывается в production без какого-либо ручного вмешательства.
Сравнение на примере GitLab CI/CD:
# Continuous Delivery Pipeline
stages:
- test
- build
- deploy_to_staging
- deploy_to_production # Этот этап требует ручного запуска
deploy_to_production:
stage: deploy_to_production
script:
- ./deploy-prod.sh
environment: production
when: manual # КРИТИЧЕСКАЯ РАЗНИЦА: ручной триггер
only:
- main
# Continuous Deployment Pipeline
stages:
- test
- build
- deploy_to_staging
- deploy_to_production # Этот этап выполняется автоматически
deploy_to_production:
stage: deploy_to_production
script:
- ./deploy-prod.sh
environment: production
when: on_success # КРИТИЧЕСКАЯ РАЗНИЦА: автоматический триггер
only:
- main
Когда что использовать?
- Continuous Delivery: Стандартный подход для большинства команд. Дает бизнесу контроль над моментом релиза, позволяет проводивать final verification.
- Continuous Deployment: Требует исключительного уровня доверия к автоматизированным тестам (включая нагрузочные, security, smoke-тесты) и мониторингу. Часто используется в продуктах с высокой частотой изменений и robust-инструментами отката (например, feature flags, canary-релизы).
В моих проектах мы обычно начинаем с настройки надежного Continuous Delivery, а затем, по мере совершенствования практик тестирования и мониторинга, оцениваем возможность перехода к Continuous Deployment для определенных сервисов.