Ответ
Continuous Delivery (Непрерывная поставка) — это практика, при которой код автоматически проходит весь цикл сборки, тестирования и подготовки к релизу, но развертывание в production выполняется вручную (например, по нажатию кнопки). Основная цель — гарантировать, что в любой момент времени существует готовый к релизу артефакт.
Continuous Deployment (Непрерывное развертывание) — это следующий шаг, при котором каждое успешное изменение, прошедшее пайплайн, автоматически развертывается в production без какого-либо ручного вмешательства. Это требует исключительно надежного и всеобъемлющего процесса тестирования.
Проще говоря:
- Continuous Delivery: «Мы можем выпустить новую версию в любой момент одним кликом.»
- Continuous Deployment: «Каждая успешная сборка автоматически становится новой версией для пользователей.»
Практическая реализация в пайплайне (на примере GitLab CI):
# Общие стадии для обоих подходов
stages:
- build
- test
- deploy-staging
# Ключевое отличие в стадии deploy-production
# Continuous Delivery: ручной триггер для продакшена
deploy_prod_manual:
stage: deploy-production
script:
- echo "Deploying to production..."
- ./deploy.sh production
environment: production
when: manual # <-- Ручной запуск! Это Continuous Delivery.
only:
- main
# Continuous Deployment: автоматический деплой
deploy_prod_auto:
stage: deploy-production
script:
- echo "Automatically deploying to production..."
- ./deploy.sh production
environment: production
when: on_success # <-- Автоматически после успеха предыдущих стадий! Это Continuous Deployment.
only:
- main
Из моего опыта: В большинстве корпоративных сред начинают с Continuous Delivery, так как это дает командам уверенность и контроль над моментом релиза, особенно когда требуются согласования или синхронизация с другими сервисами. Continuous Deployment — это идеал, к которому стремятся, и он отлично работает в проектах с сильной культурой тестирования (обилие unit, интеграционных, e2e-тестов) и возможностью быстрого отката (например, через feature flags или blue-green deployments).