语境:
jenkins 作业的输入参数在属性文件中定义。属性文件位置根据 jenkins 运行的环境而改变
例如:对于开发环境路径就像/app/dev/some/nested/path/propertyfile
对于产品环境路径就像/app/prod/some/nested/path/propertyfile
目前使用扩展选择参数插件来读取属性文件。如果属性文件的路径是绝对的,这很好用。
问题:
有没有办法在属性文件路径中包含全局环境变量?可以使用主动选择插件来完成吗?
语境:
jenkins 作业的输入参数在属性文件中定义。属性文件位置根据 jenkins 运行的环境而改变
例如:对于开发环境路径就像/app/dev/some/nested/path/propertyfile
对于产品环境路径就像/app/prod/some/nested/path/propertyfile
目前使用扩展选择参数插件来读取属性文件。如果属性文件的路径是绝对的,这很好用。
问题:
有没有办法在属性文件路径中包含全局环境变量?可以使用主动选择插件来完成吗?
使用主动选择插件
def choices=[]
textFile= new File("/app/${Gloabl_Var}/some/nested/path/propertyfile")
textFile.eachLine{ line ->
if(line.startsWith('<Property-Key-Name>')) {
line.split('=')[1].split(',').each {
choices.add(it)
}}}
return choices
使用扩展选择参数插件
不能直接使用属性文件,需要使用groovy脚本
import hudson.slaves.EnvironmentVariablesNodeProperty
import jenkins.model.Jenkins
def global_env_var=Jenkins.get().globalNodeProperties.get(EnvironmentVariablesNodeProperty.class).envVars['<Global_Var>']
def props = new Properties()
def stream = new FileInputStream("/app/${global_env_var}/some/nested/path/propertyfile")
try {
props.load(stream)
} finally {
stream.close()
}
return props.getProperty('<Property-Key-Name>').split(',')
参考: