如何存储Jenkins不同Active Choice选项下的复选框选择状态?
Jenkins Active Choice 参数保留多选项选择状态方案
核心思路
通过新增隐藏参数存储所有选项的历史勾选记录,结合Groovy脚本在参数渲染时恢复之前的选择,在构建预处理时更新记录,实现切换Alpha选项时不丢失之前的勾选状态。
具体实现步骤
新增隐藏存储参数
添加一个Hidden Parameter(隐藏参数),命名为SELECTION_HISTORY,默认值设为{},专门用来存Alpha各选项对应的勾选结果。调整Alpha下拉参数
Alpha的Active Choice脚本保持基础配置即可:return ['A', 'B']重写Numeric响应式复选框脚本
替换原有的Numeric参数Groovy脚本,实现读取历史记录、恢复勾选状态的逻辑:import groovy.json.JsonSlurper import groovy.json.JsonBuilder def alphaChoice = bindings.get('Alpha') def historyStr = bindings.get('SELECTION_HISTORY') ?: '{}' def history = new JsonSlurper().parseText(historyStr) // 定义Alpha选项和对应Numeric选项的映射关系 def optionMap = [ 'A': ['1', '2', '3'], 'B': ['4', '5', '6'] ] // 取出当前Alpha选项之前的勾选记录,没有就设为空列表 def selectedValues = history[alphaChoice] ?: [] // 生成带勾选状态的复选框选项 return optionMap[alphaChoice].collect { value -> [value: value, selected: selectedValues.contains(value)] }添加构建预处理步骤更新历史
在构建的第一个步骤添加Execute Groovy Script,用来更新存储的历史记录:import groovy.json.JsonSlurper import groovy.json.JsonBuilder def alpha = env.Alpha def numericSelections = env.Numeric.split(',') // 复选框选择会以逗号分隔的字符串返回 def historyStr = env.SELECTION_HISTORY ?: '{}' def history = new JsonSlurper().parseText(historyStr) // 更新当前Alpha选项对应的勾选记录 history[alpha] = numericSelections def updatedHistory = new JsonBuilder(history).toPrettyString() // 把更新后的记录写入环境变量,后续步骤直接用 env.SELECTION_HISTORY = updatedHistory println "Updated selection history: ${updatedHistory}"构建中使用完整选择字典
后续构建步骤里,直接调用env.SELECTION_HISTORY就能拿到格式为{A: [1, 2], B: [4, 5]}的JSON字符串,解析后即可按字典形式使用。
内容的提问来源于stack exchange,提问作者anon-explorer
相关产品推荐
相关产品推荐

