如何基于作业参数设置Jenkins环境变量?

hmtdttj4  于 2023-01-25  发布在  Jenkins
关注(0)|答案(4)|浏览(199)

我有一个项目,我需要根据用户选择的选择参数设置环境变量。每个项目都有一个主题项目依赖项。我希望用户选择项目,然后从属性文件加载主题名称。类似于

proj1=theme1
proj2=theme2
proj3=theme3

如果用户从PROJECT_NAME选择参数中选择proj1,我想自动将THEME_NAME设置为theme1,那么最好的方法是什么?
我不想在添加新项目时修改Jenkins作业配置,而是希望将Map保存在一个文件中,这样我就可以在版本控制中使用它。

vcudknz3

vcudknz31#

我将提供一个我使用过的替代解决方案。我希望它也能对其他人有用。
我用的是Environment Injector Plugin .去插件管理器安装它.

检查构建环境的**Inject environment variables to the build process**属性。在Groovy脚本中定义以下内容:

piwo6bdm

piwo6bdm2#

啊哈,我找到了一个简单的解决方案!使用EnvInject插件,在作业配置中:

    • 构建环境**

[X]向构建过程注入环境变量
属性文件路径C:\pathtofile\mapping.properties
属性内容THEME_NAME=${${PROJECT_NAME}}
工作起来像一个魅力!

nxowjjhe

nxowjjhe3#

有时候,能够通过Jenkins设置参数并将其作为Jenkins env.vars进行设置是很好的。密码之类的东西可以在参数中进行保护,但不能通过环境注入器插件进行保护。
下面是一个示例:

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')
}

只需在UI中设置参数:

3okqufwl

3okqufwl4#

我希望你在jenkins中谈论的是参数化构建。所以如果你给予选择参数名称PROJECT_NAME和选择是:-

proj1
proj2
proj3

然后,Jenkins会根据启动构建所触发的选择,自动将这些值之一(即proj 1、proj 2、proj 3)分配给变量PROJECT_NAME。实际上,您可以在作业配置页面的任何位置使用$PROJECT_NAME作为变量。
但是你需要值(theme 1,theme 2,theme 3)..这样Map到我的知识不是jenkins提供的。
但是,您可以使用构建shell来执行Map:-

if [ $PROJECT_NAME = "proj1" ] 
    then <your logic goes here for implementing theme1>
fi
.....

相关问题