В чём отличие 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
--- --- ---

🧠 Визуализация:

Допустим, вы разработчик:

  1. Вы пишете код, делаете коммит и пуш.

  2. Delivery: система собирает приложение, прогоняет тесты, и заливает артефакт на staging.

  3. Вы проверяете staging и нажимаете кнопку "Deploy to production".

  4. Deployment: запускается финальный шаг, развёртывающий всё на проде.

В Continuous Deployment этап 3 просто отсутствует: продакшн обновится автоматически после успешной доставки.