如何获取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
相关产品推荐
相关产品推荐

