Ответ
Да, проектирование, настройка и поддержка CI/CD pipelines — это основная часть моей работы как DevOps-инженера. Я использую их для обеспечения быстрой и надежной доставки изменений.
Например, в одном из проектов на GitLab CI pipeline был настроен так:
stages:
- validate
- test
- build
- deploy-staging
- security-scan
- deploy-prod
validate:
stage: validate
script:
- terraform validate
- terraform fmt -check
- hadolint Dockerfile # Линтер для Dockerfile
test:
stage: test
script:
- docker build --target test -t app-test .
- docker run app-test # Запуск юнит-тестов внутри контейнера
build:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
artifacts:
paths:
- docker-build.log
deploy-staging:
stage: deploy-staging
script:
- echo $KUBECONFIG_STAGING > kubeconfig
- kubectl --kubeconfig=kubeconfig set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
environment:
name: staging
Ключевые принципы, которые я применяю:
- Инфраструктура как код (IaC): Проверка (
terraform validate) и планирование (terraform plan) Terraform-конфигураций на этапеvalidate. - Сканирование безопасности: Интеграция Trivy для сканирования образов и зависимостей на уязвимости.
- Гитопс (GitOps): Для более сложных проектов использовал ArgoCD, где деплой инициируется автоматически при изменении манифестов в Git-репозитории.
- Откат (Rollback): Pipeline всегда включает возможность быстрого отката к предыдущему стабильному образу.
Такой подход позволяет нам делать десятки деплоев в день с минимальным риском.