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

如何获取Jenkins中HTML表格参数的符合条件的Desired Scale值

解决Jenkins参数表格中获取符合条件的Desired Scale值问题

要实现你需要的效果,得给现有HTML表格做两处关键修改:给每个Desired Scale输入框绑定对应组件名,再添加脚本筛选符合条件的数值,最终把结果传递给Jenkins。

修改后的完整HTML代码

<html>
    <head>
        <style>
            table, th, td {  
                border: 1px solid black;  
                text-align: center; 
                width: 40%; 
                border-collapse: collapse;
            }
        </style>
        <script>
            function collectScalingUpdates() {
                const rows = document.querySelectorAll('table tr');
                const updates = [];
                
                // 跳过表头,遍历数据行
                for (let i = 1; i < rows.length; i++) {
                    const row = rows[i];
                    const component = row.cells[0].textContent.trim();
                    const currentScale = parseInt(row.cells[1].textContent.trim());
                    const desiredInput = row.cells[2].querySelector('input');
                    const desiredScale = parseInt(desiredInput.value);
                    
                    // 筛选条件:期望数≠当前数,或期望数为0
                    if (!isNaN(desiredScale) && (desiredScale !== currentScale || desiredScale === 0)) {
                        updates.push(`${component}=${desiredScale}`);
                    }
                }
                
                // 将结果存入隐藏输入框,传递给Jenkins
                document.getElementById('scaling_updates').value = updates.join(',');
                return true;
            }
        </script>
    </head>
    <body onsubmit="return collectScalingUpdates()">
        <table>
            <tr>
                <th>COMPONENT</th>
                <th>CURRENT SCALE</th> 
                <th>DESIRED SCALE</th>
            </tr>
            <tr>
                <td>A1</td>
                <td>-1</td>
                <td><input type='number' step='1' min='0' max='5' name="A1" value="-1"/></td>
            </tr>
            <tr>
                <td>B1</td>
                <td>1</td>
                <td><input type='number' step='1' min='0' max='5' name="B1" value="1"/></td>
            </tr>
            <tr>
                <td>C1</td>
                <td>-1</td>
                <td><input type='number' step='1' min='0' max='5' name="C1" value="-1"/></td>
            </tr>
        </table>
        <!-- 隐藏输入框,用于传递筛选后的结果 -->
        <input type="hidden" id="scaling_updates" name="scaling_updates" />
    </body>
</html>

关键修改说明

  • 给每个Desired Scale输入框添加name(对应组件名)和value(初始值设为Current Scale),方便脚本获取和对比数值。
  • 添加collectScalingUpdates脚本:
    • 遍历表格数据行,提取组件名、当前实例数、期望实例数。
    • 筛选出期望数≠当前数或期望数为0的有效项(排除用户未输入的空值)。
    • 将符合条件的项拼成A1=2,B1=0格式的字符串,存入隐藏输入框。
  • 给<body>绑定onsubmit事件,确保提交时自动执行筛选逻辑。

Jenkins流水线中使用参数

在流水线里,通过params.scaling_updates获取筛选后的字符串,拆分后执行更新操作:

pipeline {
    agent any
    parameters {
        string(name: 'scaling_updates', defaultValue: '', description: '需要更新的组件及实例数')
    }
    stages {
        stage('Scale Components') {
            steps {
                script {
                    if (params.scaling_updates) {
                        def updates = params.scaling_updates.split(',')
                        updates.each { update ->
                            def (component, scale) = update.split('=')
                            echo "正在更新组件 ${component} 到 ${scale} 实例"
                            // 替换为你的实际更新命令,比如K8S扩缩容
                            // sh "kubectl scale deployment ${component} --replicas=${scale}"
                        }
                    } else {
                        echo "没有需要更新的组件"
                    }
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Alfred Hitchkock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:02:52