Встречается на 46% собеседований по DevOps

В чём отличие Deployment от Delivery

Deployment (развертывание) и Delivery (доставка) — это два разных этапа в жизненном цикле поставки программного обеспечения, которые часто путают. Delivery — это процесс подготовки и проверки продукта, который включает разработку, тестирование и интеграцию, чтобы получить готовую к передаче версию. Deployment — это процесс установки и запуска этой готовой версии на целевой инфраструктуре, чтобы сделать её доступной пользователям.

Как это работает

Delivery (доставка) охватывает весь путь от написания кода до создания релизного артефакта. На этом этапе выполняются:

  • Сборка приложения из исходного кода.
  • Автоматическое тестирование (модульное, интеграционное, e2e).
  • Проверка безопасности и соответствия требованиям.
  • Упаковка в артефакт (например, Docker-образ, JAR-файл, deb-пакет).

Результат Delivery — это готовый к развертыванию артефакт, который хранится в репозитории (например, Nexus, Docker Hub) и может быть передан команде эксплуатации или автоматической системе.

Deployment (развертывание) — это практический запуск этого артефакта в целевой среде. Включает:

  • Установку артефакта на серверы, в Kubernetes-кластер или облачные сервисы.
  • Настройку окружения (переменные, конфигурационные файлы, секреты).
  • Запуск процесса и проверку работоспособности (health checks).
  • Откат в случае сбоя.

Deployment происходит после Delivery и может быть автоматизирован с помощью CI/CD-пайплайнов.

Пример

Рассмотрим простой пайплайн на GitLab CI:

yaml
stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - docker build -t myapp:${CI_COMMIT_SHA} .
    - docker push registry.example.com/myapp:${CI_COMMIT_SHA}

test_job:
  stage: test
  script:
    - docker run registry.example.com/myapp:${CI_COMMIT_SHA} pytest

deploy_job:
  stage: deploy
  script:
    - kubectl set image deployment/myapp myapp=registry.example.com/myapp:${CI_COMMIT_SHA}
    - kubectl rollout status deployment/myapp

Здесь стадии build и test относятся к Delivery: они создают и проверяют артефакт. Стадия deploy — это Deployment: она обновляет приложение в кластере.

Подводные камни

  • Смешение понятий в обсуждениях: Delivery — это не то же самое, что Continuous Delivery (CD), хотя термин часто сокращают. Continuous Delivery — это практика, при которой каждый коммит готов к релизу, но развертывание происходит вручную или по требованию.
  • Deployment без Delivery невозможен: нельзя развернуть то, что не было собрано и проверено. Но Delivery без Deployment — нормальная ситуация, когда артефакт готов, но ещё не выкачен в прод.
  • Автоматизация: в DevOps часто стремятся автоматизировать оба процесса, но Deployment может требовать ручного подтверждения (approval) для продакшена.

Когда использовать

  • Delivery — когда говорим о процессе подготовки релиза: CI-пайплайн, тестирование, управление версиями.
  • Deployment — когда говорим о выкладке на конкретную среду: dev, staging, production.

В резюме и на собеседованиях важно показать понимание разницы: например, «я настроил CI для доставки артефактов в Nexus, а деплой в Kubernetes выполняю через ArgoCD».

Коротко

  • Delivery — создание и проверка готового к использованию артефакта.
  • Deployment — установка и запуск этого артефакта на целевой инфраструктуре.
  • Delivery предшествует Deployment, но не всегда за ним следует.
  • Оба процесса автоматизируются в CI/CD, но Deployment может требовать ручного шага.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы