我正在使用Gradle Jenkins插件创建一个执行Gradle构建的Jenkins作业。 我有一些总是需要的参数,这些参数被传递给Jenkins“参数化构建”。这些参数使用以下格式正确传递给gradlew.bat:
-DParam1=value1
现在有一些额外的参数是动态的,我更喜欢使用单个Jenkins参数,例如“AdditionalParamters”,并传递这些值,如下所示:
"-DoptionalParam1=value1 -DOptionalParam2=value2".
如果我使用这样的参数,那么传递给Gradle的值是“-DAdditionalParamters = -DoptionalParam1 = value1 -DOptionalParam2 = value2”,这不是我打算传递的。
那么有没有办法通过使用单个Jenkins参数将多个系统参数传递给gradle?
答案 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'
}