Jenkins:如何在 activeChoiceReactiveParam 脚本中传递列表变量?
Jenkins: How to pass a list variable in activeChoiceReactiveParam script?
我正在尝试构建一个参数化的管道作业,我想根据 selected[=34] 填充 ENVIRONMENTs 的列表=] 帐户秒。为此,我正在使用 activeChoiceParam
和 activeChoiceReactiveParam
,但我需要将列表变量传递给脚本以生成适当的 ENV 列表。这是(类似的东西)我有 atm:
def valACCS = [
'"npr - Non-Production [E002N]"',
'"prd - Live/Production [E002P]"',
]
def valNprENVS = [
'"dev - Development"',
'"int - Integration"',
]
def valPrdENVS = [
'"ppr - Pre-Production"',
'"liv - Live/Production"',
]
pipelinejob('iac_deploy') {
parameters {
activeChoiceParam('ACCOUNTS') {
choiceType('SINGLE_SLELCT')
groovyScript {
script('['+valACCS.join(', ')+']')
}
}
activeChoiceReactiveParam('ENVIRONMENTS') {
choiceType('SINGLE_SLELCT')
groovyScript {
script('''
if (ACCOUNTS.split('-')[0].trim() == 'npr') {
return [valNprENVS.join(', ')]
} else if (ACCOUNTS.split('-')[0].trim() == 'prd') {
return [valPrdENVS.join(', ')]
} else {
return ['NONE']
}
''')
}
referencedParameter('ACCOUNTS')
}
}
}
就是这样,它在 valNprENVS
上工作正常,但 valNprENVS
或 valPrdENVS
的值根本没有扩展。建立工作后,这就是我得到的 activeChoiceReactiveParam
:
但对于 activeChoiceParam
,它使用以下值正确扩展:
我也在尝试为 activeChoiceReactiveParam 做类似的事情。知道我该怎么做吗?
经过一段时间 tug-of-war,我设法做到了,因为在 nest 中没有找到任何关于此类问题的明确参考,所以回答我自己的问题,以防万一其他人之后也一样。诀窍是在 script()
块中使用 Triple Double-Quote String,然后变量将在其中扩展,使用 ${varName}
语法。
这就是我最终所做的,它为我完成了工作:
activeChoiceReactiveParam('ENVIRONMENTS') {
choiceType('SINGLE_SLELCT')
groovyScript {
script("""\
if (ACCOUNTS.split('-')[0].trim().equals('npr')) {
return ${valNprENVS}
} else if (ACCOUNTS.split('-')[0].trim().equals('prd')) {
return ${valPrdENVS.join}
} else {
return ['NONE']
}
""".stripIndent())
}
referencedParameter('ACCOUNTS')
}
其余更改是装饰性的:"""\
删除了第一个 new_line;将 ==
替换为 .equals
; .stripIndent
删除每行等的前导空格,但与解决手头的问题无关。
希望对别人有所帮助!
我正在尝试构建一个参数化的管道作业,我想根据 selected[=34] 填充 ENVIRONMENTs 的列表=] 帐户秒。为此,我正在使用 activeChoiceParam
和 activeChoiceReactiveParam
,但我需要将列表变量传递给脚本以生成适当的 ENV 列表。这是(类似的东西)我有 atm:
def valACCS = [
'"npr - Non-Production [E002N]"',
'"prd - Live/Production [E002P]"',
]
def valNprENVS = [
'"dev - Development"',
'"int - Integration"',
]
def valPrdENVS = [
'"ppr - Pre-Production"',
'"liv - Live/Production"',
]
pipelinejob('iac_deploy') {
parameters {
activeChoiceParam('ACCOUNTS') {
choiceType('SINGLE_SLELCT')
groovyScript {
script('['+valACCS.join(', ')+']')
}
}
activeChoiceReactiveParam('ENVIRONMENTS') {
choiceType('SINGLE_SLELCT')
groovyScript {
script('''
if (ACCOUNTS.split('-')[0].trim() == 'npr') {
return [valNprENVS.join(', ')]
} else if (ACCOUNTS.split('-')[0].trim() == 'prd') {
return [valPrdENVS.join(', ')]
} else {
return ['NONE']
}
''')
}
referencedParameter('ACCOUNTS')
}
}
}
就是这样,它在 valNprENVS
上工作正常,但 valNprENVS
或 valPrdENVS
的值根本没有扩展。建立工作后,这就是我得到的 activeChoiceReactiveParam
:
但对于 activeChoiceParam
,它使用以下值正确扩展:
我也在尝试为 activeChoiceReactiveParam 做类似的事情。知道我该怎么做吗?
经过一段时间 tug-of-war,我设法做到了,因为在 nest 中没有找到任何关于此类问题的明确参考,所以回答我自己的问题,以防万一其他人之后也一样。诀窍是在 script()
块中使用 Triple Double-Quote String,然后变量将在其中扩展,使用 ${varName}
语法。
这就是我最终所做的,它为我完成了工作:
activeChoiceReactiveParam('ENVIRONMENTS') {
choiceType('SINGLE_SLELCT')
groovyScript {
script("""\
if (ACCOUNTS.split('-')[0].trim().equals('npr')) {
return ${valNprENVS}
} else if (ACCOUNTS.split('-')[0].trim().equals('prd')) {
return ${valPrdENVS.join}
} else {
return ['NONE']
}
""".stripIndent())
}
referencedParameter('ACCOUNTS')
}
其余更改是装饰性的:"""\
删除了第一个 new_line;将 ==
替换为 .equals
; .stripIndent
删除每行等的前导空格,但与解决手头的问题无关。
希望对别人有所帮助!