Ответ
Подготовка инфраструктуры — это отдельный, часто предшествующий этап, который реализуется по принципу Infrastructure as Code (IaC). В современных практиках это не обязательно часть каждого пайплайна сборки приложения.
Основные подходы:
-
Отдельный инфраструктурный пайплайн (Terraform Cloud, Atlantis): Инфраструктура (VPC, Kubernetes кластер, базы данных) создается и обновляется по своим правилам, независимо от деплоя приложения. Изменение в коде инфраструктуры (
main.tf) запускает свой CI/CD, который выполняетterraform planиapply. -
Этап в пайплайне приложения (для сред, подобных 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) должна быть уже готовой и стабильной к моменту запуска пайплайна деплоя приложения. Пайплайн приложения лишь размещает в ней новый артефакт.