如何在Jenkins中通过Groovy创建排除已选源值的动态联动参数
Jenkins跨服务器拷贝任务动态参数实现方案
不需要编写大量if-else判断分支,直接利用Groovy原生集合操作+Active Choices插件的联动能力,就能用极简逻辑实现需求。
前置依赖
需要先安装Jenkins的Active Choices插件,该插件支持参数间的实时联动,是实现动态下拉选项的标准方案。
具体实现步骤
- 定义SOURCE参数:参数类型选择「Active Choices Parameter」,Groovy脚本中统一维护全量服务器清单,直接返回全量列表作为下拉选项:
// 全量服务器清单,后续新增/删除服务器在此处维护即可 def allServers = [ "server1", "server2", "server3", "server4", "server5" // 追加你的其余50+台服务器配置 ] return allServers
- 定义TARGET参数:参数类型选择Active Choices Reactive Parameter(反应式参数),在配置页的「Referenced parameters(引用参数)」输入框中填入
SOURCE,表示该参数会监听SOURCE参数的选中值变化自动刷新选项,Groovy脚本直接通过集合差集过滤已选中的源服务器即可:
// 此处全量服务器清单需要和SOURCE参数中的定义保持完全一致 def allServers = [ "server1", "server2", "server3", "server4", "server5" // 和SOURCE参数的清单保持同步 ] // Groovy原生支持集合差集运算,直接减去当前选中的SOURCE值即可得到目标选项列表 // 即使后续SOURCE配置为多选,该写法依然生效,会自动排除所有已选中的源服务器 return allServers - SOURCE
优化建议
如果不想在两个参数的脚本中重复维护全量服务器清单,可以把全量服务器列表抽成Jenkins共享库的全局静态变量,或者定义在Jenkins全局环境配置中,两个参数的脚本都从同一位置读取全量列表,后续调整服务器清单仅需修改一处。
实测验证:当SOURCE选中
server3时,上述脚本返回的TARGET选项为["server1","server2","server4","server5"],完全匹配需求逻辑,且服务器数量多少都不影响代码复杂度。
内容的提问来源于stack exchange,提问作者Philip Shangguan
相关产品推荐
相关产品推荐

