Где хранил конфигурации CI/CD?

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

Ответ

Конфигурации CI/CD всегда хранятся как код (IaC) в том же Git-репозитории, что и основной проект. Это обеспечивает версионирование, прослеживаемость изменений и согласованность между всеми окружениями (dev, staging, prod).

Основное место хранения:

  • Файлы .gitlab-ci.yml для GitLab CI/CD.
  • Директория .github/workflows/ для GitHub Actions.
  • Файл .circleci/config.yml для CircleCI.

Пример конфигурации GitLab CI для сборки Docker-образа и деплоя в Kubernetes:

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

variables:
  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $DOCKER_IMAGE .
    - docker push $DOCKER_IMAGE

deploy_to_staging:
  stage: deploy
  image: bitnami/kubectl:latest
  script:
    - kubectl config use-context staging-cluster
    - kubectl set image deployment/my-app app=$DOCKER_IMAGE -n staging
  only:
    - main

Для хранения секретов (токены, пароли, ключи) НЕ используем конфиги напрямую. Вместо этого применяем:

  • Встроенные секреты CI-систем: GitLab CI Variables, GitHub Secrets, CircleCI Environment Variables.
  • Внешние хранилища: HashiCorp Vault или облачные аналоги (AWS Secrets Manager, GCP Secret Manager). Доступ к ним настраивается через переменные окружения в заданиях CI/CD.

Этот подход соответствует принципам безопасности и позволяет легко управлять конфигурациями для разных веток и окружений.