#jenkins #groovy #refactoring #jenkins-pipeline #jenkinsfile
#дженкинс #groovy #рефакторинг #дженкинс-конвейер
Вопрос:
Я хочу преобразовать мой сценарий конвейера Дженкинса в классы для удобства чтения и повторного использования.
Проблема в том, что при этом я получаю исключения. Давайте рассмотрим простой пример:
Когда я запускаю
echo currentBuild.toString()
все в порядке
Но когда я извлекаю его в класс как так:
class MyClass implements Serializable {
def runBuild() {
echo currentBuild.toString()
}
}
new MyClass().runBuild()
я получаю исключение:
Started by user admin
Replayed #196
[Pipeline] End of Pipeline
groovy.lang.MissingPropertyException: No such property: currentBuild for class: MyClass
Каков правильный способ извлечения кода конвейера в классы?
Ответ №1:
Вы на правильном пути, но проблема в том, что вы не передали объект script экземпляру вашего класса и пытались вызвать метод, который не определен в классе, который вы создали.
Вот один из способов решить эту проблему:
// Jenkins file or pipeline scripts editor in your job
new MyClass(this).runBuild()
// Class declaration
class MyClass implements Serializable {
def script
MyClass(def script) {
this.script=script
}
def runBuild() {
script.echo script.currentBuild.toString()
}
}
Комментарии:
1. Спасибо вам за ваш любезный ответ. Я понял это через несколько минут после публикации вопроса 🙂
2. Похоже, это не работает с последним плагином конвейера версии v2.5. Выдается следующее исключение
groovy.lang.MissingPropertyException: No such property: script for class: MyClass
3. @bram не могли бы вы предоставить нам более подробную информацию о вашем скрипте? Теперь вы его запускаете?
Ответ №2:
в вашем коде отсутствует сценарий объявления поля класса
class MyClass implements Serializable {
def script
MyClass(def script) {
this.script=script
}
def runBuild() {
script.echo script.currentBuild.toString()
}
}
этот код должен быть в порядке @bram