В чём отличие Deployment от Delivery
Delivery и Deployment — два ключевых понятия в процессе разработки и выпуска программного обеспечения. Они тесно связаны, но означают разные этапы и цели в цепочке поставки кода. Чтобы чётко понять различие между ними, важно рассмотреть их контекст в системах CI/CD (Continuous Integration / Continuous Delivery / Continuous Deployment) и жизненном цикле разработки.
📦 Continuous Delivery (CD — «доставка»)
Delivery (доставка) означает, что программное обеспечение автоматически собирается, тестируется и готовится к развертыванию (deployment), но сам процесс развёртывания в production — ещё не выполняется автоматически.
❗ Ключевые характеристики:
-
Система всегда готова к деплою.
-
Каждое изменение проходит через pipeline:
-
Сборка
-
Юнит/интеграционные тесты
-
Проверка безопасности
-
Сбор артефакта
-
Размещение артефакта в staging-окружении
-
-
Manual trigger (ручной запуск) используется для деплоя в production.
-
Подразумевает высокий уровень автоматизации до стадии продакшн, но само развертывание по-прежнему контролируется человеком (например, кнопкой в CI/CD интерфейсе).
🔧 Пример:
В компании применяется GitLab CI. Каждый merge в main запускает pipeline: проходят тесты, собирается Docker-образ, он загружается в реестр, и staging-сервер обновляется. Продакшн деплой запускается вручную по команде DevOps или релиз-менеджера.
🚀 Continuous Deployment (развёртывание)
Deployment (развёртывание) означает автоматическое размещение доставленного кода на production-серверах без участия человека. Это следующий шаг после Delivery. Система развёртывания может работать по триггеру завершения Delivery pipeline или в режиме polling.
❗ Ключевые характеристики:
-
Полная автоматизация — от коммита до обновления production.
-
Поддержка откатов (rollback) в случае сбоя.
-
Требует максимально надёжного pipeline’а (качественные тесты, мониторинг, alerting).
-
Минимальное время между написанием кода и попаданием его в продакшн.
-
Используется для частого и безопасного выпуска изменений (до нескольких раз в день).
🔧 Пример:
Каждый push в main запускает CI/CD pipeline. После прохождения всех проверок (lint, тесты, security scan), новая версия автоматически выкатывается в production, без ожидания подтверждения от человека.
🧩 Сравнение по ключевым аспектам
Характеристика | Continuous Delivery | Continuous Deployment |
---|---|---|
Развёртывание в production | По кнопке (вручную) | Автоматически |
--- | --- | --- |
Автоматизация | Высокая, но не полная | Полная (от кода до продакшн) |
--- | --- | --- |
Требования к стабильности | Средние | Очень высокие |
--- | --- | --- |
Риск ошибок | Контролируемый человеком | Требует защиты через тесты и мониторинг |
--- | --- | --- |
Подходит для | Финтех, банковский сектор, гос. проекты | Продуктовые компании, SaaS, стартапы |
--- | --- | --- |
Примеры инструментов | GitHub Actions, GitLab CI, Jenkins | Spinnaker, ArgoCD, Flux, Harness |
--- | --- | --- |
🧠 Визуализация:
Допустим, вы разработчик:
-
Вы пишете код, делаете коммит и пуш.
-
Delivery: система собирает приложение, прогоняет тесты, и заливает артефакт на staging.
-
Вы проверяете staging и нажимаете кнопку "Deploy to production".
-
Deployment: запускается финальный шаг, развёртывающий всё на проде.
В Continuous Deployment этап 3 просто отсутствует: продакшн обновится автоматически после успешной доставки.