Как установить переменную среды 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
.....
Другие вопросы по тегам