#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 (только карта)