Открыть сервис

Deployment

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

История

До начала 2000-х годов развёртывание ПО было преимущественно ручным процессом. Администраторы вручную копировали файлы на серверы, настраивали параметры в конфигурационных файлах и перезапускали службы. Такой подход был медленным, подверженным ошибкам («человеческий фактор») и не масштабировался для сложных распределённых систем.

С развитием интернет-сервисов и облачных вычислений возникла необходимость в автоматизации. Появились инструменты управления конфигурациями (Puppet, Chef, Ansible, SaltStack), которые позволяли описывать желаемое состояние системы в виде кода (Infrastructure as Code, IaC). Параллельно развивались контейнерные технологии (Docker, Kubernetes), которые упростили упаковку приложений и их перенос между средами.

В 2010-х годах сформировалась практика непрерывного развёртывания (Continuous Deployment, CD), при которой каждое изменение кода, прошедшее автоматические тесты, немедленно выкатывается в production. Это стало частью DevOps-культуры.

Цели и задачи

Основные цели deployment:

  • Доставка новой функциональности пользователям с минимальной задержкой.
  • Обеспечение стабильности — развёрнутая система должна работать без сбоев и потерь данных.
  • Воспроизводимость — процесс развёртывания должен давать одинаковый результат на разных средах (разработка, тестирование, production).
  • Безопасность — защита от несанкционированного доступа и утечек данных в процессе развёртывания.
  • Откат (rollback) — возможность быстро вернуться к предыдущей рабочей версии в случае ошибки.

Классификация видов deployment

По способу доставки

  1. Ручной deployment — все операции выполняются человеком через консоль или интерфейс управления. Применяется для небольших проектов или в экстренных ситуациях.
  2. Автоматизированный deployment — процесс запускается по команде (например, нажатием кнопки в CI/CD-системе), но отдельные шаги могут требовать подтверждения.
  3. Непрерывный deployment (Continuous Deployment) — каждое изменение кода, прошедшее все стадии автоматической проверки, автоматически выкатывается в production без участия человека.

По стратегии выкатки

  1. Blue-Green deployment — одновременно поддерживаются две идентичные среды (blue — текущая, green — новая). Трафик мгновенно переключается с blue на green после проверки. Позволяет быстро откатиться.
  2. Canary deployment — новая версия постепенно выкатывается на небольшую часть пользователей (например, 5%), затем, при отсутствии проблем, распространяется на всех. Минимизирует влияние потенциальных ошибок.
  3. Rolling deployment — обновление выполняется поэтапно, заменяя старые экземпляры новыми без остановки всего сервиса. Часто используется в Kubernetes.
  4. A/B deployment — две версии работают параллельно, но трафик распределяется по определённым критериям (география, тип устройства, случайная выборка) для сравнения поведения.
  5. Recreate — все старые экземпляры останавливаются, затем запускаются новые. Простой сервиса неизбежен, но процесс прост и предсказуем.

По типу окружения

  • Development — среда разработчика, часто нестабильная, с включённым отладочным режимом.
  • Staging — среда, максимально приближенная к production, используется для финального тестирования.
  • Production — среда, в которой приложение работает с реальными пользователями и данными.
  • Disaster Recovery — резервная среда, активируемая при отказе основной.

Процесс deployment

Типовой пайплайн (конвейер) развёртывания включает следующие этапы:

  1. Сборка (build) — компиляция исходного кода, создание исполняемого артефакта (бинарного файла, Docker-образа, пакета).
  2. Тестирование — автоматические юнит-тесты, интеграционные тесты, тесты безопасности.
  3. Упаковка — формирование релизного пакета (архив, контейнер, Helm-чарт).
  4. Развёртывание на staging — проверка в окружении, аналогичном production.
  5. Приёмочные испытания — smoke-тесты, нагрузочное тестирование, проверка совместимости.
  6. Развёртывание на production — выполняется по выбранной стратегии (blue-green, canary и т.д.).
  7. Мониторинг и валидация — отслеживание метрик (ошибки, время отклика, загрузка CPU), алертинг, логирование.
  8. Откат при необходимости — автоматический или ручной возврат к предыдущей стабильной версии.

Инструменты

Системы управления конфигурациями

  • Ansible (Red Hat) — агентный, использует YAML-плейбуки, работает по SSH.
  • Puppet — использует декларативный язык, требует агента на целевых узлах.
  • Chef — основан на Ruby, использует «рецепты» и «кукбуки».
  • SaltStack — гибридный подход, поддерживает как push, так и pull.

Контейнеризация и оркестрация

  • Docker — упаковка приложения и его зависимостей в контейнер.
  • Kubernetesоркестратор контейнеров, управляет развёртыванием, масштабированием, сетевым взаимодействием.
  • Docker Compose — для локального развёртывания многоконтейнерных приложений.

CI/CD-системы

  • Jenkins — старейшая и наиболее распространённая система с открытым исходным кодом.
  • GitLab CI/CD — встроенная в GitLab платформа.
  • GitHub Actions — встроенная в GitHub система.
  • CircleCI, Travis CI, TeamCity — коммерческие и open-source решения.

Инструменты для управления версиями и артефактами

Проблемы и риски

  • Downtime — простой сервиса во время развёртывания, особенно при стратегии recreate.
  • Несовместимость — новая версия может не работать с текущей версией базы данных или другими микросервисами.
  • Конфигурационные ошибки — неверные параметры окружения (переменные, ключи API, URL).
  • Утечка данных — при неправильной настройке доступа или логов.
  • Человеческий фактор — случайное удаление важных данных, неверная команда.
  • Сложность отката — если новая версия изменила схему базы данных, откат может быть затруднён.

Практики и методологии

  • Infrastructure as Code (IaC) — описание инфраструктуры (серверы, сети, балансировщики) в виде кода, который хранится в Git и проходит ревью.
  • Immutable infrastructure — серверы не обновляются, а заменяются новыми образами. Это исключает дрейф конфигураций.
  • Feature flags — включение/выключение функциональности без переразвёртывания, что позволяет тестировать новые возможности на ограниченной аудитории.
  • Chaos engineering — преднамеренное внесение сбоев для проверки устойчивости системы к отказам во время развёртывания.

Применение в различных отраслях

  • Веб-сервисы — развёртывание фронтенда и бэкенда на облачных платформах (AWS, Azure, Яндекс.Облако).
  • Мобильные приложения — публикация в магазинах приложений (App Store, Google Play) через сторы, часто с поэтапным rollout (staged rollout).
  • Встраиваемые системы — прошивка устройств (IoT, автомобили, медицинское оборудование) через OTA (over-the-air) обновления.
  • Корпоративное ПО — развёртывание ERP-систем, CRM, баз данных на внутренних серверах компании.

Источники

  • Humble, J., Farley, D. «Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation» (2010).
  • Kim, G., Humble, J., Debois, P., Willis, J. «The DevOps Handbook» (2016).
  • Документация Kubernetes (kubernetes.io/docs/concepts/workloads/controllers/deployment/).
  • Документация Ansible (docs.ansible.com).
  • Статья «Deployment strategies» на MartinFowler.com (2014).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →