Jenkins动态参数PREVIOUS_VERSION在Stage中无法取值的问题
Jenkins动态参数取值异常问题解决
问题根源
你猜的没错,问题出在动态生成的HTML控件名称和参数定义不匹配。你定义的动态参数名称是PREVIOUS_VERSION,但生成的input标签用了nexus_version_number作为name属性——Jenkins只会把用户输入的值绑定到参数定义的名称上,所以输入的内容根本没传到params.PREVIOUS_VERSION里,自然输出为空。
修复方案
把生成的input标签的name属性改成和参数名一致的PREVIOUS_VERSION,同时优化current选项下的返回内容(比如返回隐藏控件,确保参数始终有值)。
修正后的完整代码
properties([parameters([ choice(name: 'VERSION', choices: 'current\nprevious', description: "============ Select current or previous build ============"), [$class : "DynamicReferenceParameter", choiceType : "ET_FORMATTED_HTML", name : "PREVIOUS_VERSION", referencedParameters: "VERSION", script : [$class: "GroovyScript", script: [sandbox: true, script: ''' if ( VERSION.equals("previous") ) { // 把name改成和参数名一致的PREVIOUS_VERSION return "<input name='PREVIOUS_VERSION' value='' class='setting-input' type='text'>" } else { // 返回隐藏控件,保证参数始终有值(空值) return "<input name='PREVIOUS_VERSION' type='hidden' value=''><span>not applicable</span>" } ''']]] ])]) pipeline { environment { VERSION_INPUT = "${params.VERSION}" PREVIOUS_VERSION_INPUT = "${params.PREVIOUS_VERSION}" } stages { stage('Initialize') { steps { echo "######## Initialize ########" script { println VERSION_INPUT println PREVIOUS_VERSION_INPUT } } } } }
额外注意事项
- 动态参数生成的HTML控件,
name属性必须和参数定义的name完全匹配,Jenkins才能正确映射用户输入到params对象中 - 当不需要用户输入时,返回隐藏控件可以避免参数未定义的情况,也不会影响页面显示(用span展示提示文本即可)
内容的提问来源于stack exchange,提问作者Dave Smith
相关产品推荐
相关产品推荐

