如何将HTML/JS界面参数传入Jenkins Pipeline并读取?
解决Active Choices自定义HTML参数传入Jenkins Pipeline的问题
要让自定义HTML里的参数能被流水线读取,核心是把多个输入字段的值打包成结构化数据(比如JSON),作为Active Choices参数的返回值,之后在流水线里解析这个数据即可。以下是具体实现步骤:
1. 修改Active Choices的Groovy脚本
调整原有代码,添加隐藏输入框存储打包后的JSON数据,并通过JavaScript在值变化时同步更新:
return """ <div> <input type="checkbox" id="enable" name="ENB" onclick="show()"> </div> <div id="advp" style="display: none;"> <div> <input type="number" id="field1" name="field1" value="1" step="1" required oninput="updateResult()"> </div> <div> <input type="number" id="field2" name="field2" value="1" step="1" required oninput="updateResult()"> </div> <div> <input type="number" id="field3" name="field3" value="1" step="1" required oninput="updateResult()"> </div> </div> <!-- 隐藏输入框,name需与Active Choices参数名称一致 --> <input type="hidden" id="advanced_params_result" name="AdvancedParams"> <script> function show() { var enabled = document.getElementById("enable"); var advp = document.getElementById("advp"); advp.style.display = enabled.checked ? "block" : "none"; updateResult(); } function updateResult() { var enabled = document.getElementById("enable").checked; var resultInput = document.getElementById("advanced_params_result"); // 组装所有字段为JSON对象 var params = { enable: enabled, field1: enabled ? document.getElementById("field1").value : "1", field2: enabled ? document.getElementById("field2").value : "1", field3: enabled ? document.getElementById("field3").value : "1" }; // 转为字符串存入隐藏输入框 resultInput.value = JSON.stringify(params); } // 页面加载时初始化结果 updateResult(); </script> """
关键调整说明:
- 新增的隐藏输入框
name必须和你定义的Active Choices参数名称完全一致(示例中为AdvancedParams)。 updateResult()函数会把复选框状态和输入值打包成JSON,确保任何值变化时都同步更新最终要传递的参数。
2. 在Jenkins Pipeline中解析参数
流水线中通过解析JSON字符串获取各个字段的值(需安装Pipeline Utility Steps插件,或用原生Groovy解析):
pipeline { agent any parameters { activeChoicesReactiveReferenceParameter( name: 'AdvancedParams', description: '高级参数设置', script: [ groovyScript: [ script: ''' // 填入上面修改后的完整Groovy脚本 return """ <div> <input type="checkbox" id="enable" name="ENB" onclick="show()"> </div> <!-- 省略其余HTML/JS代码 --> """ ''' ] ], referencedParameters: '' ) } stages { stage('读取参数') { steps { script { // 解析JSON参数 def advancedParams = readJSON text: params.AdvancedParams // 提取各个字段值 def isEnabled = advancedParams.enable def field1Value = advancedParams.field1 as Integer def field2Value = advancedParams.field2 as Integer def field3Value = advancedParams.field3 as Integer // 测试输出 echo "高级参数是否启用: ${isEnabled}" if (isEnabled) { echo "field1值: ${field1Value}" echo "field2值: ${field2Value}" echo "field3值: ${field3Value}" } } } } } }
替代方案(无插件时)
如果没有Pipeline Utility Steps插件,用原生Groovy解析:
import groovy.json.JsonSlurper def advancedParams = new JsonSlurper().parseText(params.AdvancedParams)
内容的提问来源于stack exchange,提问作者Some Guy
相关产品推荐
相关产品推荐

