Как реорганизовать общий код Jenkins JobDSL?
У меня есть следующая спецификация 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
. Какой правильный способ сделать это?
Ответы
Ответ 1
Кудрявые скобки образуют закрытие 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')
}
}