在 Jenkinsfile 中声明具有动态值的 json 时出现异常

147*_*.3k 5 groovy jenkins-pipeline

def props = readJSON text: [ 'buildName':"${params.buildName}",   'targetRepo':"${params.artifactoryReleases}"]
echo props.buildName
echo props.targetRepo
Run Code Online (Sandbox Code Playgroud)

得到以下错误

org.kohsuke.stapler.NoStaplerConstructorException:在 org.kohsuke.stapler.ClassDescriptor.loadConstructorParamNames(ClassDescriptor.java:265) 在 org.jenkinsci.plugins.structs.desc.desc 的 java.lang.String 类的任何构造函数上都没有 @DataBoundConstructor在 org.jenkinsci.plugins.structs.describable.DescribableModel.coerce(DescribableModel.java:380) 处的 DescribableModel.(DescribableModel.java:122)

导致:java.lang.IllegalArgumentException:无法在 org.jenkinsci.plugins 为 ReadJSONStep(file?: String, text?: String) 实例化 {text={buildName=alu-rp, targetRepo=na-generic-releases}}。 structs.describable.DescribableModel.instantiate(DescribableModel.java:264) 在 org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance(StepDescriptor.java:201)

小智 10

由于您使用的props是 JSON,因此您需要将其转换为字符串以进行回显

尝试: echo props.toString()

您也可以print改用,不需要转换为字符串: print props


Ram*_*ath 2

这就是您正在寻找的

#!/usr/bin/env groovy

final def buildName = "master"
final def artifactoryReleases = "1.0"
pipeline {
agent any
stages {
    stage('Init') {
        steps {
            script{
                def props = readJSON text: '{ "buildName": "'+"${buildName}"+'" ,"targetRepo":"'+"${artifactoryReleases}" +'" }'
                echo props.buildName
                echo props.targetRepo
            }
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)