如何在Jenkins pipeline流水线脚本中实现参数重新赋值?
报错原因
Jenkins Pipeline 中的内置params对象是只读的不可变映射,默认不允许直接修改键值,所以直接修改params属性会抛出java.lang.UnsupportedOperationException异常。
可用解决方案
方案1:使用可修改的参数映射(最推荐,无额外权限要求)
无需零散定义临时变量,只需在流水线开头将只读的params转换为可修改的HashMap全局使用即可,后续所有参数调用统一使用这个自定义映射:
// 全局声明可修改的参数映射 def modifiableParams = new HashMap(params) def reasignParams() { if(modifiableParams.B == '') { modifiableParams.B = modifiableParams.A } } pipeline{ parameters { string(name: 'A', defaultValue: '1.1', description: "Master Value") string(name: 'B', defaultValue: '', description: "Slave value") } stages { stage('参数测试') { steps { script { reasignParams() echo "A的值:${modifiableParams.A}" echo "B修改后的值:${modifiableParams.B}" } } } } }
该方案没有权限依赖,也不会修改Jenkins内置的构建记录,仅需统一替换参数调用前缀即可,使用成本极低。
方案2:修改构建内置参数(特殊场景使用,需额外权限)
如果确实需要修改Jenkins本次构建的内置参数元数据,可以使用如下方法,修改后的值也会同步展示在本次构建的参数详情中:
import hudson.model.* def reasignParams() { if(params.B == '') { def build = currentBuild.rawBuild def newBValue = new StringParameterValue('B', params.A) build.replaceAction(new ParametersAction(newBValue)) } }
注意:该方案需要配置Jenkins脚本安全权限,否则会触发权限拒绝报错,无特殊需求不建议使用。
内容的提问来源于stack exchange,提问作者Chandan Naik
相关产品推荐
相关产品推荐

