Как установить переменную среды Jenkins на основе параметра задания?
У меня есть проект, в котором мне нужно установить переменную среды, основанную на параметре выбора, который выбирает пользователь. Каждый проект имеет зависимость от темы проекта. Я бы хотел, чтобы пользователь выбрал проект, а затем загрузил имя темы из файла свойств. Что-то вроде
proj1=theme1
proj2=theme2
proj3=theme3
Если пользователь выбирает proj1
от PROJECT_NAME
параметр выбора, я хочу автоматически установить THEME_NAME
быть theme1
, Каков будет лучший способ пойти по этому поводу?
Я не хочу изменять конфигурацию задания Jenkins всякий раз, когда добавляется новый проект. Вместо этого я хочу иметь отображение в файле, чтобы иметь его в управлении версиями.
3 ответа
Ага, я нашел простое решение! Используя плагин EnvInject, в конфигурации работы:
Построить среду
[X] Внедрение переменных среды в процесс сборки
Путь к файлу свойств
C:\pathtofile\mapping.properties
Свойства Содержимое
THEME_NAME=${${PROJECT_NAME}}
Работает как шарм!
Иногда приятно иметь возможность устанавливать параметры через Jenkins и, в свою очередь, передавать их как Jenkins env. вары. Такие вещи, как пароли, могут быть защищены параметрами, но не могут быть защищены плагином Environment Injector.
Пример для этого:
environment {
AWS_ECR_ACCOUNT_ID="${params.AWS_ECR_ACCOUNT_ID}"
AWS_ACCESS_KEY_ID="${params.AWS_ACCESS_KEY_ID}"
AWS_SECRET_ACCESS_KEY="${params.AWS_SECRET_ACCESS_KEY}"
AWS_SESSION_TOKEN="${params.AWS_SESSION_TOKEN}"
}
parameters {
string(name: 'AWS_ECR_ACCOUNT_ID', defaultValue: '', description: 'AWS ECR account ID')
password(name: 'AWS_ACCESS_KEY_ID', defaultValue: '', description: 'The AWS access key ID')
password(name: 'AWS_SECRET_ACCESS_KEY', defaultValue: '', description: 'The AWS secret access key')
password(name: 'AWS_SESSION_TOKEN', defaultValue: '', description: 'The AWS session token')
}
И просто установите параметры в пользовательском интерфейсе:
Я предоставлю альтернативное решение, которое я использовал. Я надеюсь, что это также может быть полезно для других.
Я использовал плагин Environment Injector. Зайдите в менеджер плагинов и установите его.
Проверьте Inject environment variables to the build process
свойство среды сборки. Определите следующее в Groovy Script:
Я надеюсь, что вы говорите о параметризованной сборке в Jenkins. Поэтому, если вы дадите параметру выбора имя PROJECT_NAME и выберите один из следующих вариантов:
proj1
proj2
proj3
затем Дженкинс автоматически назначит одно из этих значений (например, proj1, proj2, proj3) переменной PROJECT_NAME в соответствии с выбором, запущенным для запуска сборки. Вы можете использовать $PROJECT_NAME в качестве переменной в любом месте страницы конфигурации задания.
Но вам требуются значения (theme1, theme2, theme3).. такое отображение, насколько мне известно, не предоставлено Дженкинсом.
Однако вы можете использовать сборочную оболочку для отображения:
if [ $PROJECT_NAME = "proj1" ]
then <your logic goes here for implementing theme1>
fi
.....