В чем разница между Continuous Deployment и Continuous Delivery?

«В чем разница между Continuous Deployment и Continuous Delivery?» — вопрос из категории CI/CD, который задают на 29% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Оба термина относятся к этапам автоматизированного пайплайна после 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 для определенных сервисов.