#continuous-integration #gitlab #devops #continuous-deployment #gitlab-ci-runner
#непрерывная интеграция #gitlab #devops #непрерывное развертывание #gitlab-ci-runner
Вопрос:
Мой конфигурационный файл gitlab ci-cd использует множество переменных env. Для их установки я использую секретные переменные gitlab ci-cd.
Например, часть развертывания разработки:
- echo "====== Deploy to dev server ======"
# Add target server`s secret key
- apk add git openssh bash
- mkdir ~/.ssh
- echo $DEV_SERVER_SECRET_KEY_BASE_64 | base64 -d > ~/.ssh/id_rsa
- chmod 700 ~/.ssh amp;amp; chmod 600 ~/.ssh/*
- echo "Test ssh connection for"
- echo "$DEV_SERVER_USER@$DEV_SERVER_HOST"
- ssh -o StrictHostKeyChecking=no -T "$DEV_SERVER_USER@$DEV_SERVER_HOST"
# Delploy
- echo "Setup target server directories"
- TARGET_SERVER_HOST=$DEV_SERVER_HOST TARGET_SERVER_USER=$DEV_SERVER_USER TARGET_SERVER_APP_FOLDER=$DEV_SERVER_APP_FOLDER pm2 deploy pm2.config.js dev setup 2>amp;1 || true
- echo "make deploy"
- TARGET_SERVER_HOST=$DEV_SERVER_HOST TARGET_SERVER_USER=$DEV_SERVER_USER TARGET_SERVER_APP_FOLDER=$DEV_SERVER_APP_FOLDER pm2 deploy pm2.config.js dev
У меня есть 5 репозиториев в проекте и 3 сервера (dev, preprod, prod). Итак, я должен управлять многими переменными. Управлять всеми ними, используя секретные переменные gitlab ci-cd, это очень больно. Я не вижу этого, измените это — только удалите и создайте. Я согласен использовать его для секретных ключей ssh, но он не подходит для указания имен папок, хостов и т.д.
Есть ли какой-либо другой способ предоставить переменные скрипту ci-cd?
Комментарии:
1. Вы нашли способ передать GitLab ENV в скрипты (через process.env или каким-либо другим методом)?
Ответ №1:
Вы можете определять пользовательские переменные несколькими способами:
I. использование графического интерфейса:
- для каждого проекта
- для каждой группы проектов
- для каждого экземпляра Gitlab (для всех проектов и групп)
с использованием файла .gitlab-ci.yml II.:
Вы можете использовать ключевое слово variables в задании или на верхнем уровне файла .gitlab-ci.yml. Если переменная находится на верхнем уровне, она доступна глобально и все задания могут ее использовать. Если это определено в задании, только это задание может его использовать.
variables:
TEST_VAR: "All jobs can use this variable's value"
job1:
variables:
TEST_VAR_JOB: "Only job1 can use this variable's value"
script:
- echo "$TEST_VAR" and "$TEST_VAR_JOB"
Убедитесь, что в вашем файле .gitlab-ci.yaml хранятся только нечувствительные переменные
Проверьте официальную документацию для получения дополнительной информации и примеров.