我正在嘗試構建一個引數化的管道作業,我想根據所選的ACCOUNT填充ENVIRONMENT的串列。我正在使用and ,但我需要將串列變數傳遞給腳本以生成適當的 ENV 串列。這是(類似的)我的自動取款機: activeChoiceParamactiveChoiceReactiveParam
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 做類似的事情。知道我該怎么做嗎?
uj5u.com熱心網友回復:
經過一番拉鋸戰,我設法做到了,因為在巢中沒有找到任何明確的此類問題的參考,所以回答了我自己的問題,以防萬一其他人也有同樣的問題。訣竅是在塊中使用三重雙引號字串script(),然后變數將使用${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洗掉每行上的前導空格等,但與解決手頭的問題無關。
希望對其他人有所幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/464487.html
標籤:詹金斯 詹金斯管道 jenkins-groovy 詹金斯-工作-dsl
