Используешь ли CI/CD pipelines в работе?

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

Ответ

Да, проектирование, настройка и поддержка 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 всегда включает возможность быстрого отката к предыдущему стабильному образу.

Такой подход позволяет нам делать десятки деплоев в день с минимальным риском.