You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins自由风格任务中将Active Choice参考参数的HTML用户输入传递给执行Shell步骤

解决Jenkins Active Choice Reference参数HTML输入取值问题

单个输入字段的正确配置

  1. 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)。

  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:40:32