общий декларативный конвейер: перегрузка оператора вызова при сохранении доступа к этапам конвейера

#jenkins #groovy

#дженкинс #groovy

Вопрос:

У меня есть общий конвейер Дженкинса, который в настоящее время вызывается через его call() оператора. Метод вызова принимает фиксированный набор параметров. Я хочу изменить call() подпись, чтобы вместо этого принимать именованные параметры. Это упростит расширение параметров в будущем.

Поскольку я не могу одновременно обновить все файлы Jenkins, которые вызывают общий конвейер, я должен поддерживать совместимость подписи. Моя идея состояла в том, чтобы переопределить call() метод, подобный:

 
// old call method
def call(String repo, String version) {
    call(repo: repo, version: version)
}

def call (Map params) {
    pipeline {
         agent { label 'master' }
         [...]
     }
}
 

Если я вызываю конвейер с помощью via call("repo1", "master") , он завершается с ошибкой : No such DSL method 'agent' .
Кажется, я потерял доступ к привязке переменной файла Jenkins (?).

Как мне убедиться, что шаги Дженкинса по-прежнему доступны при перегрузке call() ? Может быть, есть лучшее решение для обеспечения совместимости общих конвейеров при изменении сигнатуры метода?

Комментарии:

1. Сохраните 1 метод с объявлением вызова (Object… параметры) и проверка внутри, если параметры тогда являются map… В противном случае это массив..

2. @daggett спасибо, хорошая идея. Было бы здорово, если бы было решение, в котором у меня есть в конце call() метод, который я могу передать с именем args (только карта)