2015-01-13 19 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维基页面,请参阅https://github.com/jenkinsci/job-dsl-plugin/pull/683 – daspilker

+0

在node - > node /之后,正斜杠会执行什么操作? ..? – sloven