Как происходит доставка кода в продакшен (деплой)?

«Как происходит доставка кода в продакшен (деплой)?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Доставка кода — это автоматизированный конвейер (pipeline), который превращает коммит в работающее приложение. В моей практике это выглядит так:

  1. Коммит и CI (Continuous Integration): После пуша в Git (например, в ветку main) автоматически запускается пайплайн (GitLab CI/CD, GitHub Actions). Он выполняет:

    • Сборку артефакта (например, Docker-образа).
    • Запуск юнит- и интеграционных тестов.
      # Пример этапа сборки в .gitlab-ci.yml
      build:
      stage: build
      script:
      - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
      - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  2. CD (Continuous Delivery/Deployment): Успешная сборка запускает этап деплоя. Мы используем стратегию blue-green в Kubernetes для минимизации даунтайма.

    • Новую версию ("green") разворачиваем параллельно со старой ("blue").
    • Направляем тестовый трафик (например, через Istio VirtualService) на "green" для проверки.
    • После успешных smoke-тестов переключаем весь трафик.
  3. Откат (Rollback): При обнаружении проблем (например, через алерты в Prometheus/Grafana) откатываемся на предыдущую стабильную версию одной командой: kubectl rollout undo deployment/my-app. Все конфигурации инфраструктуры хранятся как код (Terraform, Helm), что делает процесс полностью воспроизводимым и контролируемым.