Я определил в своем конвейере быстрый регистратор для проверки цветных журналов с помощью плагина AnsiColor.
Он работает как шарм.
def logger(String str, String level)
{
if (level == "ALERT")
{
ansiColor('xterm')
{
echo '\033[32m' + str // Green
}
}
else if (level == "BOLD")
{
ansiColor('xterm')
{
echo '\033[1;31m' + str // Green
}
}
}
Я называю его тогда
logger("CHECK THIS ALERT","ALERT")
и он печатает:
Теперь проблема в том, что я хочу переместить этот метод в класс в наших общих библиотеках (мы уже у меня есть другие общие библиотеки, работающие без проблем)
Но когда я перемещаю метод под класс разделяемой библиотеки, возникает следующая проблема:
hudson.remoting.ProxyException: groovy.lang.MissingMethodException: No signature of method: com.pipeline.Logger.ansiColor() is applicable for argument types: (java.lang.String, org.jenkinsci.plugins.workflow.cps.CpsClosure2) values: [xterm, org.jenkinsci.plugins.workflow.cps.CpsClosure2@a2e9a55]
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:54)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:20)
Я думаю, что это проблема видимости, так что общая библиотека не имеет видимости метода ansiColor (), но я не уверен, как его импортировать, с помощью плагина DSL мы решаем эти проблемы с помощью использования делегата, но, насколько я знаю, они не могут быть использованы внутри трубопроводы.