将动态参数传递给Gradle Jenkins插件

将动态参数传递给Gradle Jenkins插件,jenkins,gradle,Jenkins,Gradle,我正在使用Gradle Jenkins插件创建一个执行Gradle构建的Jenkins作业。 我有几个参数是必须的,它们被传递给Jenkins的“参数化构建”。这些参数以以下格式正确传递给gradlew.bat: -DParam1=value1 现在有一些本质上是动态的附加参数,我更喜欢使用单个Jenkins参数,如“AdditionalParameters”,并按如下方式传递这些值: "-DoptionalParam1=value1 -DOptionalParam2=value2".

我正在使用Gradle Jenkins插件创建一个执行Gradle构建的Jenkins作业。 我有几个参数是必须的,它们被传递给Jenkins的“参数化构建”。这些参数以以下格式正确传递给gradlew.bat:

-DParam1=value1 
现在有一些本质上是动态的附加参数,我更喜欢使用单个Jenkins参数,如“AdditionalParameters”,并按如下方式传递这些值:

 "-DoptionalParam1=value1 -DOptionalParam2=value2". 
如果我使用这样一个参数,那么传递给Gradle的值是“-dadditionalParameters=-doptationalParam1=value1-doptationalParam2=value2”,这不是我想要传递的


那么,有没有办法通过使用一个Jenkins参数将多个系统参数传递给gradle

当Jenkins将参数传递给Gradle时,它们被设置为系统属性。现在的任务是解析作为“附加参数”传递的“-doptationalParam1=value1-doptationalParam2=value2”,然后将这些参数作为JVM参数进一步传递给Java应用程序。下面是执行此操作的Gralde代码段。为了简化,将“附加参数”传递为“optionalParam1=value1 OptionalParam2=value2”,即不使用-D语法

    task runJavaApp(type: JavaExec, dependsOn: build) {

        def jvmParams = []
        project.gradle.startParameter.systemPropertiesArgs.entrySet().each{
        if (it.key!="Additional Parameters") {
            jvmParams <<  "-D${it.key}=${it.value}"
        } else {
            def tokens = (it.value).split(/\s{1,}/)
            tokens.each {
                def key, value
                if (it.split('=').length == 2)
                    (key, value )= it.split('=')
                else
                    throw new Exception("'${it}' should be of type key=value");
                jvmParams <<  "-D${key}=${value}"
                }
            }//if
        }
        jvmArgs jvmParams
        workingDir = project.executeDir
        classpath = sourceSets.main.runtimeClasspath + files(project.executeDir)
        main = 'myApplicaionMainClass'
    }
task runJavaApp(类型:JavaExec,dependsOn:build){
def jvmParams=[]
project.gradle.startParameter.systemPropertiesArgs.entrySet().each{
if(it.key!=“其他参数”){

jvmParams为什么要用一个键传递多个系统属性?有什么好处?@BenGreen,我们有50多个不同的配置属性,其中大多数都有默认值。但是,我们可能需要通过设置一个系统属性来更改这些属性的默认值。因此,如果必须更改,例如第48和49个属性,我可以将其设置为-doptationalparam48=value48-doptationalparam49=value49,那么如果您也在gradle中检查这些参数,为什么不能在jenkins作业中使用-doptationalparam48=value48?使用-DAdditionalParameters=-doptationalparam48=value48有什么好处,以便我从jenki将-doptationalparam48=value48传递给gradlens,我必须在Jenkins“参数化构建”中添加一个新的参数“optionalParam48”。同样,1-50个参数中的每一个都需要相同的方法,这使得Jenkins参数页很难看。这就是我考虑使用通用的“OptionalParameters”的原因使用OptionalParameters,我可以将尽可能多的name=value对传递给Gradle