如何使用Groovy修改另一个Jenkins pipeline的指定参数且不覆盖其余参数
解决方案:增量修改Jenkins Pipeline指定参数
你之前使用的Job DSL是声明式全量覆盖配置模式,所以会清空目标任务的原有参数。要实现保留其他参数仅修改指定项的需求,可以调用Jenkins原生API做增量更新,具体实现如下:
可直接运行的Groovy脚本
import jenkins.model.Jenkins import hudson.model.ParametersDefinitionProperty import hudson.model.StringParameterDefinition // 目标任务完整名称,多文件夹层级需写全路径,例如 "folderA/Job-B" def targetJobName = "Job-B" // 要修改的参数名、新值、描述 def targetParamKey = "KEY" def targetParamNewValue = "NEW_VALUE" def targetParamDescription = "" // 可保留原有描述,也可自定义 def jenkins = Jenkins.get() def targetJob = jenkins.getItemByFullName(targetJobName) if (!targetJob) { throw new Exception("未找到目标任务:${targetJobName}") } // 获取目标任务现有参数配置 def paramProperty = targetJob.getProperty(ParametersDefinitionProperty.class) def newParamList = [] boolean paramExists = false if (paramProperty) { // 遍历现有参数,仅修改目标项,其余参数原样保留 paramProperty.getParameterDefinitions().each { param -> if (param.getName() == targetParamKey) { newParamList.add(new StringParameterDefinition(targetParamKey, targetParamNewValue, targetParamDescription)) paramExists = true } else { newParamList.add(param) } } } // 目标参数不存在时自动新增 if (!paramExists) { newParamList.add(new StringParameterDefinition(targetParamKey, targetParamNewValue, targetParamDescription)) } // 新参数列表写回任务配置并保存 targetJob.removeProperty(ParametersDefinitionProperty.class) targetJob.addProperty(new ParametersDefinitionProperty(newParamList)) targetJob.save() jenkins.reload() println "参数${targetParamKey}修改完成,所有原有参数已保留"
注意事项
- 脚本可直接在Jenkins脚本控制台运行,也可嵌入到其他Pipeline的
script块中执行 - 执行脚本的身份需要拥有目标任务的「配置」权限,在Pipeline中运行时需要提前在Jenkins脚本安全配置中放行相关API调用
- 如需修改其他类型参数,把
StringParameterDefinition替换为对应参数类即可:- 布尔参数:
BooleanParameterDefinition - 选项参数:
ChoiceParameterDefinition - 密码参数:
PasswordParameterDefinition
- 布尔参数:
内容的提问来源于stack exchange,提问作者Adnrey
相关产品推荐
相关产品推荐

