2015-01-13 6 views
18

私は、次のJobDSLスペックを持っている:一般的なJenkins JobDSLコードをリファクタリングする方法は?

job { 
    steps { 
    gradle('generateLock saveLock', '-PdependencyLock.includeTransitives=true', true) { node -> 
     node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
    gradle('check', '', true) { node -> 
     node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
    } 
} 
私は関数に、共通のコード、発言権をリファクタリングしたいと思い

def gradlew(String tasks, String options) { 
    gradle(tasks, options, true) { node -> 
    node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
} 

しかしgradle関数は内部から見えませんgradlew機能。これを行う正しい方法は何ですか?

答えて

24

中括弧はGroovyクロージャを形成します。各クロージャには、メソッド呼び出しの対象となるデリゲートオブジェクトがあります。デリゲートにはdelegateプロパティからアクセスできます。そのデリゲートをヘルパー関数に渡して、そのメソッドにアクセスすることができます。

def gradlew(def context, String tasks, String options = '') { 
    context.gradle(tasks, options, true) { node -> 
    node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
} 
job { 
    steps { 
    gradlew(delegate, 'generateLock saveLock', '-PdependencyLock.includeTransitives=true') 
    gradlew(delegate, 'check') 
    } 
} 
+3

一般的に使用されているコードを抽出する方法については、プロジェクトwikiで明示的な例を実行することをおすすめします。私たちはかなり長い間同じことを探していました。 –

+3

設定ブロックに関するJob DSL wikiページを更新します。https://github.com/jenkinsci/job-dsl-plugin/pull/683を参照してください。 – daspilker

+0

node - > node /の後にスラッシュは何をしますか? ..? – sloven

関連する問題