Интеграция CI/CD для доставки инфраструктуры¶
Для замыкания цикла GitOps используются конвейеры непрерывной интеграции и непрерывного развертывания (CI/CD), которые обеспечивают автоматическое применение изменений инфраструктуры.
Этапы конвейера CI/CD для OpenStack IaC¶
- Проверка синтаксиса и валидация
- Планирование и тестирование
- Проверка и утверждение
- Применение изменений
- Проверки после развертывания
Детальное описание этапов¶
1. Проверка синтаксиса и валидация¶
Используйте инструменты для выявления синтаксических ошибок на ранних стадиях.
# Для Ansible
ansible-lint playbooks/site.yml
yamllint playbooks/site.yml
# Для Terraform
terraform fmt -check
terraform validate
# Для Heat
openstack stack validate -t template.yaml
2. Планирование и тестирование¶
Просмотр изменений, которые будут применены.
# Для Terraform
terraform plan -out=plan.tfplan
# Для Ansible (режим проверки)
ansible-playbook --check --diff playbooks/site.yml
# Для Heat (тестовый запуск)
openstack stack create --dry-run -t template.yaml test-stack
Конвейеры также могут запускать временную тестовую среду в проекте-песочнице для проверки изменений.
3. Проверка и утверждение¶
Проверка результатов работы конвейера и предлагаемых изменений. Многие организации настраивают процедуру утверждения в системах CI, требующую разрешения человека для выполнения шагов применения.
approve:
stage: approve
script:
- echo "Approving changes for production"
when: manual
only:
- production
4. Применение изменений¶
Автоматическое выполнение изменений в зависимости от используемого инструмента.
# Для Terraform
terraform apply plan.tfplan
# Для Ansible
ansible-playbook playbooks/site.yml
# Для Heat (обновление существующего стека)
openstack stack update --wait -t template.yaml production-stack
# Для Heat (создание нового стека)
openstack stack create --wait -t template.yaml new-stack
5. Проверки после развертывания¶
Запуск дымовых тестов или проверок конфигурации для убеждения в работоспособности новой инфраструктуры.
# Проверка доступности сервисов
curl -f http://new-server.example.com/health
# Проверка через Ansible
ansible-playbook playbooks/post-deploy-checks.yml
# Проверка через OpenStack
openstack server list --name web-server
Инструменты CI/CD¶
Различные системы CI/CD могут управлять этими этапами:
Примеры конвейеров¶
GitLab CI/CD для Terraform¶
stages:
- validate
- plan
- approve
- apply
variables:
TF_ROOT: ${CI_PROJECT_DIR}
TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_COMMIT_REF_NAME}
cache:
key: "${CI_COMMIT_REF_SLUG}"
paths:
- ${TF_ROOT}/.terraform
before_script:
- cd ${TF_ROOT}
- terraform init -backend-config=address=${TF_ADDRESS}
validate:
stage: validate
script:
- terraform fmt -check
- terraform validate
- tflint
plan:
stage: plan
script:
- terraform plan -out=plan.tfplan
artifacts:
paths:
- ${TF_ROOT}/plan.tfplan
approve:
stage: approve
script:
- echo "Approving changes for ${CI_COMMIT_REF_NAME}"
only:
- production
when: manual
apply:
stage: apply
script:
- terraform apply plan.tfplan
dependencies:
- plan
only:
- main
- production
when: manual
environment:
name: production/${CI_COMMIT_REF_NAME}
GitLab CI/CD для Ansible¶
stages:
- syntax-check
- dry-run
- deploy
- verify
syntax-check:
stage: syntax-check
script:
- ansible-lint playbooks/site.yml
- ansible-playbook --syntax-check playbooks/site.yml
dry-run:
stage: dry-run
script:
- ansible-playbook --check --diff playbooks/site.yml
environment:
name: staging
deploy:
stage: deploy
script:
- ansible-playbook playbooks/site.yml
only:
- main
when: manual
environment:
name: production
verify:
stage: verify
script:
- ansible-playbook playbooks/verify.yml
only:
- main
GitLab CI/CD для OpenStack Heat¶
stages:
- validate
- deploy
- verify
variables:
STACK_NAME: "production-stack"
TEMPLATE_FILE: "templates/production.yaml"
ENVIRONMENT_FILE: "environments/production.yaml"
validate:
stage: validate
script:
- openstack stack validate -t ${TEMPLATE_FILE} -e ${ENVIRONMENT_FILE}
deploy:
stage: deploy
script:
- openstack stack create --wait -t ${TEMPLATE_FILE} -e ${ENVIRONMENT_FILE} ${STACK_NAME} ||
openstack stack update --wait -t ${TEMPLATE_FILE} -e ${ENVIRONMENT_FILE} ${STACK_NAME}
only:
- main
environment:
name: production
verify:
stage: verify
script:
- openstack stack show ${STACK_NAME}
- openstack server list --stack ${STACK_NAME}
only:
- main
Маппинг веток на среды¶
Каждая ветка может соответствовать определенной среде:
├── dev/ # ветка dev → среда разработки
├── staging/ # ветка staging → предпроизводственная среда
└── main/ # основная ветка → производственная среда
Пример конфигурации:
.base-job: &base-job
before_script:
- cd environments/${CI_COMMIT_REF_NAME}
dev:deploy:
<<: *base-job
stage: deploy
script:
- terraform apply -auto-approve
only:
- dev
environment:
name: dev
staging:deploy:
<<: *base-job
stage: deploy
script:
- terraform apply -auto-approve
only:
- staging
when: manual
environment:
name: staging
production:deploy:
<<: *base-job
stage: deploy
script:
- terraform apply -auto-approve
only:
- main
when: manual
environment:
name: production
Безопасность и соответствие требованиям¶
Внедрение механизмов безопасности и проверок соответствия:
Open Policy Agent (OPA) с Terraform¶
opa-check:
stage: validate
script:
- terraform plan -out=plan.tfplan -no-color > plan.txt
- opa eval --data policies --input plan.txt "data.terraform.deny"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
Пример политики OPA (policies/terraform.rego):
package terraform
deny[msg] {
resource := input.resource_changes[_]
resource.type == "openstack_compute_instance_v2"
resource.change.after.flavor == "m1.xlarge"
msg = sprintf("禁止使用大规格实例 m1.xlarge: %v", [resource.address])
}
Проверка секретов¶
secret-detection:
stage: validate
script:
- trufflehog filesystem --directory .
allow_failure: false
Преимущества интеграции CI/CD для инфраструктуры¶
- Автоматизация: Устранение ручных ошибок и ускорение развертывания
- Прозрачность: Полная видимость изменений через пайплайны
- Воспроизводимость: Гарантия одинакового развертывания в разных средах
- Безопасность: Проверки до применения изменений
- Аудит: Полный контрольный след всех изменений
- Скорость: Быстрое развертывание и откат при необходимости
- Соответствие требованиям: Автоматические проверки политик