Что такое автоматическое развертывание (deployment) в CI/CD?

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

Ответ

Автоматическое развертывание — это этап CI/CD-пайплайна, при котором проверенный и собранный код автоматически переносится в целевую среду (stage, production) без ручного вмешательства оператора. Это ключевой элемент практик непрерывной доставки (Continuous Delivery) и непрерывного развертывания (Continuous Deployment).

Как это работает в пайплайне:

  1. Триггер: Событие (мерж в main, тег) запускает пайплайн.
  2. Сборка и тестирование: Код собирается и проходит все автоматические тесты (юнит, интеграционные).
  3. Деплой в staging: Если тесты пройдены, артефакт автоматически разворачивается в тестовую среду для дополнительных проверок.
  4. Деплой в production: После успеха в staging (и, возможно, мануального approval для CD) происходит автоматический деплой в продуктовую среду.

Пример шага деплоя в GitLab CI (.gitlab-ci.yml) для загрузки артефакта в S3 и обновления контейнера в ECS:

deploy_to_production:
  stage: deploy
  only:
    - main
  script:
    # 1. Загрузка Docker-образа в ECR
    - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_REGISTRY
    - docker push $ECR_REGISTRY/myapp:$CI_COMMIT_SHA

    # 2. Обновление задачи (task definition) в ECS
    - aws ecs update-service --cluster my-cluster --service my-service --force-new-deployment
  environment:
    name: production
    url: https://myapp.example.com

Преимущества автоматического деплоя:

  • Скорость и частота: Позволяет выпускать обновления несколько раз в день.
  • Надежность: Исключает ошибки, вызванные ручными действиями. Процесс всегда одинаков.
  • Быстрое восстановление: В случае проблем легко и быстро выполнить откат (rollback) к предыдущей версии, так как процесс также автоматизирован.
  • Фокус команды: Разработчики тратят время на создание функциональности, а не на рутинные операции по выкладке.