2016-04-11 12 views
0

Gradle Jenkinsプラグインを使用して、Gradleビルドを実行するJenkinsジョブを作成しています。 私は常に必要とされるいくつかのパラメータを持っており、これらはJenkinsの "パラメータ化されたビルド"に渡されます。これらのパラメータは正しく、次の形式でgradlew.batに渡されます。Gradle Jenkinsプラグインに動的パラメータを渡す

-DParam1=value1 

今そこに自然の中で動的であるいくつかの追加のパラメータがあり、私は、このような「AdditionalParamters」とパスのような単一のジェンキンスパラメータを使用することを好みますそのように、これらの値:私はこのようなパラメータを使用している場合

"-DoptionalParam1=value1 -DOptionalParam2=value2". 

は、その後のGradleに渡された値は「-DAdditionalParamters = -DoptionalParam1 = VALUE1 -DOptionalParam2 =値2」であり、これは私が合格することを意図したいものではありません。

単一のJenkinsパラメータを使用して複数のシステムパラメータをグラデーションに渡す手段はありますか?

+0

なぜ1つのキーで複数のシステムプロパティを渡したいのですか?利点は何ですか? –

+0

@BenGreen、私たちは50種類以上の設定プロパティを持っていますが、そのほとんどはデフォルトを持っています。しかし、システムプロパティを設定することでこれらのデフォルト値を変更する必要があるかもしれません。だから、48番目と49番目のプロパティを変更する必要がある場合、私はそれを-DoptionalParam48 = value48 -DOptionalParam49 = value49 –

+0

として設定することができます。なぜなら、これらをチェックするならば、-DoptionalParam48 = value48をjenkinsジョブgradleのパラメータもどちらか? -DAdditionalParameters = -DoptionalParam48 = value48 –

答えて

0

JenkinsがパラメータをGradleに渡すと、システムプロパティとして設定されます。ここでの作業は、「追加パラメータ」として渡された「-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' 
    }