如何重构常见的 Jenkins JobDSL 代码?
How to refactor common Jenkins JobDSL code?
我有以下 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
函数中不可见。正确的做法是什么?
大括号形成一个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')
}
}
我有以下 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
函数中不可见。正确的做法是什么?
大括号形成一个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')
}
}