Я пытаюсь создать базовую работу, чтобы уменьшить дублирование между нашими работами. Я сделал следующее, но это не работает:
def baseJob(Map m, Closure c = {}) {
type = m.type ?: 'dev'
pipelineJob("prefix-${m.name}") {
parameters {
stringParam('ONE', 'one', 'Description one')
}
c()
}
}
baseJob(type: 'release', name: 'test') {
parameters { // <-- Fails here
stringParam('TWO', 'two', 'Description two')
}
}
Я получаю следующую ошибку:
ОШИБКА: (сценарий, строка 12) Нет подписи метода: script.parameters () применима для типов аргументов: (script $ _run_closure1 $ _closure4) значения: [script $ _run_closure1 $ _closure4 @ 18b249b3]
Следующее работает как ожидалось:
def baseJob(Map m, Closure c = {}) {
type = m.type ?: 'dev'
pipelineJob("prefix-${m.name}") {
parameters {
stringParam('ONE', 'one', 'Description one')
}
parameters { // <-- This is fine
stringParam('TWO', 'two', 'Description two')
}
c()
}
}
baseJob(type: 'release', name: 'test')
Так что проблема не в том, что я звоню parameters
несколько раз. Кажется, проблема в том, что я звоню parameters
изнутри.
Я бы хотел верить, что есть способ выполнить замыкание, чтобы parameters
вызывался правильно. Однако я подозреваю, что мне придется узнать больше о Groovy и Jenkins Job DSL, прежде чем я смогу это понять. Поэтому я надеюсь, что есть кто-то, кто знает, как это сделать.
Если у вас есть альтернативное решение для выполнения расширяемой базовой работы, это тоже правильный ответ.