I have the following JobDSL spec:
job {
steps {
gradle('generateLock saveLock', '-PdependencyLock.includeTransitives=true', true) { node ->
node / wrapperScript('${NEBULA_HOME}/gradlew')
}
gradle('check', '', true) { node ->
node / wrapperScript('${NEBULA_HOME}/gradlew')
}
}
}
I'd like to refactor the common code, say, into a function:
def gradlew(String tasks, String options) {
gradle(tasks, options, true) { node ->
node / wrapperScript('${NEBULA_HOME}/gradlew')
}
}
But the gradle
function isn't visible from within the gradlew
function. What's the right way to do this?
daspilker
The curly brackets form a Groovy closure. Each closure has a delegate object to which method calls are directed. And the delegate can be accessed via the delegate property. You can pass that delegate to the helper function to get access to it's methods.
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')
}
}
来源:https://stackoverflow.com/questions/27931795/how-to-refactor-common-jenkins-jobdsl-code