Ответ
Конфигурации 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.
Этот подход соответствует принципам безопасности и позволяет легко управлять конфигурациями для разных веток и окружений.