Классный метакласс не работает в файле .jenkinsfile в конвейере Дженкинса

#jenkins #groovy

Вопрос:

Возможно ли использовать метаКласс в файле jenkins, я пытаюсь изменить логику метода некоторого классного класса в файле .jenkins, так как не могу получить доступ к исходному коду. У меня может быть только разрешение на запуск определенной функции. Но я копаюсь в исходном коде и пытаюсь использовать какой-то другой способ, используя классное мета-программирование.

Я пробовал это, но не получилось:

 .jenkinsfile:

ExpandoMetaClass.enableGlobally()

pipeline {
    ...
    script {
        FortifyImpl.metaClass.getAnalyzeCommand {
            "echo getAnalyzeCommand"
        }
        runFortify()
    }
    ...
}

// This method defined in other file which I cannot change it.
// Here is just an example.
def runFortify() {
    String cmd = new FortifyImpl().getAnalyzeCommand()
    execute(cmd)
    ...
}
 

Я думаю, что дело не в грамматической ошибке, потому что я уже пробовал несколькими способами, такими как это:

 FortifyImpl.metaClass.getAnalyzeCommand = {...}
 

Так в чем же проблема, или невозможно использовать metaclass в jenkinsfile?

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

1. Я бы попытался сделать это в @NonCPS функции, так как такой низкоуровневый код обычно не поддерживается непосредственно в разделе конвейера.