Ответ
В GitLab CI/CD защищённые переменные настраиваются через интерфейс проекта или API. Вот как я это делаю:
1. Настройка через веб-интерфейс:
Перехожу в Settings > CI/CD проекта и раскрываю секцию Variables.
- Добавление: Нажимаю
Add variable, ввожуKey(например,PROD_DB_PASSWORD) иValue. - Защита (
Protect variable): Включаю эту опцию, если переменная должна быть доступна только для защищённых веток (например,main,production). - Маскирование (
Mask variable): Включаю, чтобы значение не отображалось в логах заданий. GitLab требует, чтобы значение было в одной строке и не содержало специальных символов, которые могут раскрыться в логах. - Тип
File: Использую, когда нужно передать целый файл (например, JSON-ключ сервисного аккаунта). GitLab сохранит значение во временный файл, путь к которому будет храниться в переменной.
2. Использование в .gitlab-ci.yml:
Переменные доступны как environment-переменные.
deploy_to_prod:
stage: deploy
script:
# Использование обычной переменной
- echo "Deploying with secret key"
# Использование переменной типа File
- cat $SERVICE_ACCOUNT_KEY_FILE | jq .
only:
- main # Protected variable будет доступна здесь
3. Добавление через API (для автоматизации):
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>"
--header "Content-Type: application/json"
--data '{"key": "NEW_SECRET", "value": "secret_value", "protected": true, "masked": true}'
"https://gitlab.example.com/api/v4/projects/123/variables"
Практический пример из опыта: На одном из проектов мы хранили таким образом токены для доступа к облачным хранилищам S3 и регистрам контейнеров. Ключевой момент — настройка Environments и Deployments, чтобы привязать переменные к конкретному окружению (staging/prod), а не ко всему проекту.