На каком этапе CI/CD подготавливается инфраструктура для развертывания приложения?

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

Ответ

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

Основные подходы:

  1. Отдельный инфраструктурный пайплайн (Terraform Cloud, Atlantis): Инфраструктура (VPC, Kubernetes кластер, базы данных) создается и обновляется по своим правилам, независимо от деплоя приложения. Изменение в коде инфраструктуры (main.tf) запускает свой CI/CD, который выполняет terraform plan и apply.

  2. Этап в пайплайне приложения (для сред, подобных staging): В одном пайплайне может быть этап, который сначала проверяет и применяет изменения инфраструктуры (например, обновляет ConfigMap в Kubernetes), а затем деплоит приложение.

Пример этапа в GitLab CI для подготовки namespace в Kubernetes:

provision_k8s_namespace:
  stage: provision
  script:
    # Применяем манифест, создающий namespace, если его нет
    - cat <<EOF | kubectl apply -f -
      apiVersion: v1
      kind: Namespace
      metadata:
        name: staging-$CI_COMMIT_REF_SLUG
    EOF
  only:
    - merge_requests
  # Этот этап выполняется ДЕСЯТИЛЕТИЯ деплоя приложения в staging

Ключевой принцип: Инфраструктура для целевой среды (особенно production) должна быть уже готовой и стабильной к моменту запуска пайплайна деплоя приложения. Пайплайн приложения лишь размещает в ней новый артефакт.