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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:06:01