Где хранятся переменные в GitLab CI?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Хранение переменных в GitLab CI/CD
В GitLab CI/CD переменные являются фундаментальным механизмом для управления конфигурацией, хранения секретов и передачи данных между этапами пайплайна. Система предлагает многоуровневый подход к хранению, обеспечивающий гибкость и безопасность. Вот основные места, где могут храниться и определяться переменные.
1. Уровни хранения переменных (от высшего приоритета к низшему)
-
Переменные, определенные в коде задания (
job) (Наивысший приоритет): Переменные, заданные непосредственно в блокеvariablesконкретного задания в файле.gitlab-ci.yml. Они переопределяют все остальные.deploy_job: script: - echo $DEPLOY_ENV variables: DEPLOY_ENV: "production" # Эта переменная определена на уровне job -
Переменные, определенные в коде пайплайна (
pipeline) (Второй по приоритету): Переменные, заданные в блокеvariablesна верхнем уровне файла.gitlab-ci.yml. Они действуют глобально для всех заданий, если не переопределены на уровне job.variables: APP_NAME: "my-awesome-app" NODE_ENV: "test" build_job: script: - echo "Building $APP_NAME for $NODE_ENV" -
Project CI/CD Variables (Третий по приоритет): Хранятся в настройках самого проекта GitLab (
Settings > CI/CD > Variables). Это основное место для хранения чувствительных данных (паролей, токенов, ключей). Здесь можно установить флажки:
* **Protect variable**: Переменная будет доступна только в пайплайнах, запущенных на защищенных ветках или тегах.
* **Mask variable**: Значение переменной будет скрыто (замаскировано) в логах выполнения пайплайна, чтобы предотвратить случайную утечку.
* **Expand variable**: Определяет, будет ли переменная раскрываться (интерполироваться) в контексте других переменных (отключите для хранения многострочных секретов вроде приватных ключей).
-
Group CI/CD Variables (Четвертый по приоритет): Хранятся в настройках группы GitLab (
Group > Settings > CI/CD > Variables). Доступны всем проектам внутри этой группы. Идеально для общих конфигураций, таких как адреса внутренних реестров артефактов или групповые токены доступа. Также поддерживают флажки Protect, Mask и Expand. -
Instance CI/CD Variables (Пятый по приоритет): Хранятся на уровне всего экземпляра GitLab (администрирование). Доступны во всех проектах и группах. Используются для глобальных настроек, например, URL внешних сервисов или корпоративных прокси. Настройка доступна только администраторам.
-
Предопределенные (predefined) переменные GitLab (Наименьший приоритет): Автоматически создаваемые системой переменные, предоставляющие контекст о выполняющемся пайплайне, коммите, проекте и т.д. (например,
$CI_PROJECT_ID,$CI_COMMIT_SHA,$CI_JOB_NAME). Их значения нельзя изменить. Полный список можно найти в официальной документации.
2. Файлы как источник переменных
Переменные также могут быть прочитаны из файлов, созданных в процессе выполнения пайплайна, с помощью ключевого слова artifacts:reports:dotenv. Это позволяет динамически генерировать конфигурацию в одном задании и использовать её в последующих.
generate_vars:
stage: build
script:
- echo "DEPLOYMENT_TAG=$(date +%Y%m%d-%H%M)" > deploy.env
artifacts:
reports:
dotenv: deploy.env
deploy:
stage: deploy
script:
- echo "Deploying with tag: $DEPLOYMENT_TAG" # Переменная загружена из файла
needs: ["generate_vars"]
3. Ключевые особенности и лучшие практики
- Приоритет: При совпадении имен переменная с более высоким приоритетом (см. список выше) переопределяет переменную с более низким.
- Безопасность: Никогда не храните секреты (пароли, приватные ключи) в файле
.gitlab-ci.yml, так как он находится в репозитории. Всегда используйте Project, Group или Instance Variables с включенной опцией Mask. - Защищенные переменные: Используйте флажок Protect для переменных, которые должны быть доступны только в production-среде (т.е., в пайплайнах, запущенных с защищенных веток, например,
mainилиproduction). - Переменные типа
File: В настройках проекта/группы можно создать переменную, значение которой будет сохранено во временный файл, а путь к нему передан через переменную среды. Это критически важно для инструментов, ожидающих конфигурацию в виде файла (например,$KUBECONFIG,$GCP_SA_KEY). - Наследование и переопределение: Можно запретить наследование глобальных переменных в конкретном задании, задав пустой блок
variables: {}.
Таким образом, выбор места хранения переменной в GitLab CI зависит от её предназначения и требуемого уровня видимости: секреты и параметры конкретного проекта — в Project Variables, общие настройки для нескольких проектов — в Group Variables, а динамические или несекретные параметры логики пайплайна — прямо в файле .gitlab-ci.yml.