Ответ
Подготовка инфраструктуры (Provisioning) обычно выполняется до основного CI/CD пайплайна приложения или в его отдельной, выделенной стадии, часто называемой infrastructure или deploy-infra. Это делается для разделения ответственности и повышения стабильности: инфраструктура должна быть готова и проверена до попыток деплоя кода.
Типичный подход "Инфраструктура как код" (IaC):
- Отдельный пайплайн/репозиторий: Инфраструктура (VPC, сети, кластер Kubernetes, базы данных) описывается в коде (Terraform, CloudFormation) и разворачивается через свой собственный CI/CD пайплайн. Изменения в инфраструктуре проходят свой код-ревью и план применения.
- Стадия в основном пайплайне: В некоторых подходах стадия подготовки инфраструктуры (например, создание/обновление временного окружения для тестирования) может быть частью основного пайплайна приложения.
Пример структуры пайплайна GitLab CI для приложения в K8s:
stages:
- build
- test
- deploy-infra # Стадия подготовки инфраструктуры
- deploy-app # Стадия деплоя приложения
# 1. Сборка и тесты приложения
build-and-test:
stage: build
script: ...
# 2. ПОДГОТОВКА ИНФРАСТРУКТУРЫ: Развертывание/обновление манифестов K8s
deploy_kubernetes_infra:
stage: deploy-infra
script:
- kubectl apply -f k8s/namespace.yaml
- kubectl apply -f k8s/configmap.yaml
- kubectl apply -f k8s/secrets.yaml
only:
- main # Инфраструктура обновляется только при мерже в main
# 3. ДЕПЛОЙ ПРИЛОЖЕНИЯ: Развертывание самого приложения в подготовленную инфраструктуру
deploy_application:
stage: deploy-app
script:
- kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
needs: ["deploy_kubernetes_infra"] # Зависит от успешного выполнения стадии инфраструктуры
Ключевые инструменты: Terraform, Pulumi, AWS CloudFormation, Ansible для provisioning; kubectl, Helm — для настройки ресурсов внутри Kubernetes.