如何在Jenkins自由风格任务中将Active Choice参考参数的HTML用户输入传递给执行Shell步骤
解决Jenkins Active Choice Reference参数HTML输入取值问题
单个输入字段的正确配置
Active Choice Reference参数的Groovy脚本:
生成HTML输入框时,确保name='value'是核心配置,Jenkins会将该字段的值作为参数的实际返回值。如果需要回显历史输入,用参数名引用当前值即可。示例脚本:return """<input name='value' class='setting-input' type='text' value='${currentBuild?.buildVariables?.MY_ACTIVE_PARAM ?: ""}' placeholder='请输入数字'>"""这里
MY_ACTIVE_PARAM是你在Jenkins中定义的Active Choice Reference参数的名称,不要混淆为HTML里的自定义变量(比如你之前用的NUMBER)。Shell步骤取值:
直接调用参数名称即可获取用户输入:echo "${MY_ACTIVE_PARAM}"
多个输入字段的处理方案
因为Active Choice参数只能返回单个值,所以需要把多个输入框的值组合成可解析的格式(比如JSON或分隔符字符串),具体步骤如下:
1. 生成多字段HTML(Groovy脚本)
给每个输入框设置唯一name,同时添加隐藏的name='value'字段,通过JavaScript实时将多字段值组合后存入隐藏字段,确保Jenkins能获取到合并后的参数值。示例脚本:
return """ <div> <input name='num1' class='setting-input' type='text' value='${currentBuild?.buildVariables?.MY_ACTIVE_PARAM ? (new groovy.json.JsonSlurper().parseText(currentBuild.buildVariables.MY_ACTIVE_PARAM).num1 ?: "") : ""}' placeholder='数字1'> <input name='num2' class='setting-input' type='text' value='${currentBuild?.buildVariables?.MY_ACTIVE_PARAM ? (new groovy.json.JsonSlurper().parseText(currentBuild.buildVariables.MY_ACTIVE_PARAM).num2 ?: "") : ""}' placeholder='数字2'> <input type='hidden' name='value' id='combinedValue'> </div> <script> // 监听输入变化,实时更新合并值 document.querySelectorAll('input[name^=\"num\"]').forEach(input => { input.addEventListener('input', updateCombinedValue); }); // 页面加载时初始化合并值 window.onload = updateCombinedValue; function updateCombinedValue() { const num1 = document.querySelector('input[name=\"num1\"]').value; const num2 = document.querySelector('input[name=\"num2\"]').value; document.getElementById('combinedValue').value = JSON.stringify({num1, num2}); } </script> """
2. Shell步骤解析合并值
如果用JSON格式组合,可借助jq工具解析(需确保Jenkins节点已安装jq):
# 提取单个字段值 NUM1=$(echo "${MY_ACTIVE_PARAM}" | jq -r '.num1') NUM2=$(echo "${MY_ACTIVE_PARAM}" | jq -r '.num2') echo "数字1: ${NUM1}" echo "数字2: ${NUM2}"
如果不想用jq,也可以改用逗号分隔的字符串:
- 将JavaScript中的组合逻辑改为:
document.getElementById('combinedValue').value = `${num1},${num2}`; - Shell中拆分取值:
IFS=',' read -r NUM1 NUM2 <<< "${MY_ACTIVE_PARAM}" echo "数字1: ${NUM1}" echo "数字2: ${NUM2}"
关键注意事项
- 必须使用你在Jenkins中定义的参数名来取值,而非HTML里的自定义变量名。
- 多字段场景下,必须通过隐藏字段或Groovy脚本将多值合并为单个参数值,Jenkins的Active Choice参数仅支持返回单个值。
- 需要回显历史输入时,从
currentBuild.buildVariables中读取参数历史值,解析后填充到对应输入框。
内容的提问来源于stack exchange,提问作者Taras
相关产品推荐
相关产品推荐

