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

时间:2016-04-11 14:28:57

标签: jenkins gradle

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

-DParam1=value1 

现在有一些额外的参数是动态的,我更喜欢使用单个Jenkins参数,例如“AdditionalParamters”,并传递这些值,如下所示:

 "-DoptionalParam1=value1 -DOptionalParam2=value2". 

如果我使用这样的参数,那么传递给Gradle的值是“-DAdditionalParamters = -DoptionalParam1 = value1 -DOptionalParam2 = value2”,这不是我打算传递的。

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

1 个答案:

答案 0 :(得分:0)

当Jenkins将参数传递给Gradle时,它们被设置为Systems Properties。现在的任务是解析作为“附加参数”传递的“-DoptionalParam1 = value1 -DOptionalParam2 = value2”,然后将它们作为JVM参数进一步传递给Java应用程序。下面是Gralde代码片段。为简化“Additional Paramter”,将其作为“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'
    }