You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:42:01