Если у меня есть метод сценария конвейера в сценарии конвейера (Jenkinsfile
), в моей Глобальной библиотеке конвейеров vars/
или в классе src/
, как можно получить OutputStream
для журнала консоли? Я хочу написать напрямую в консольный журнал.
Я знаю, что могу echo
или println
, но для этого мне нужно писать без дополнительного вывода, который дает. Мне также нужно иметь возможность передать OutputStream
чему-то другому.
Я знаю, что могу позвонить TaskListener.getLogger()
, если смогу получить экземпляр TaskListener
(действительно hudson.util.StreamTaskListener
), но как?
Я пытался:
Я изучил manager.listener.logger
(из плагина groovy postbuild), и в контексте ранней сборки, который я вызываю из него, не получается OutputStream, который записывает в консольный журнал задания.
echo "listener is a ${manager.listener} - ${manager.listener.getClass().getName()} from ${manager} and has a ${manager.listener.logger} of class ${manager.listener.logger.getClass().getName()}"
печать
listener is a hudson.util.LogTaskListener@420c55c4 - hudson.util.LogTaskListener from org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder$BadgeManager@58ac0c55 and has a java.io.PrintStream@715b9f99 of class java.io.PrintStream
Я знаю, что вы можете получить его из StepContext
через context.get(TaskListener.class)
, но я не в a Step
, я в CpsScript
(то есть WorkflowScript
т.е. Jenkinsfile
).
- Найти его из
CpsFlowExecution
, полученного из экземпляра DSL
, зарегистрированного как свойство сценария steps
, но я не смог понять, как обнаружить TaskListener
, который передается ему при его создании
Как это сложно? Чего мне не хватает? Там так много косвенной магии, что мне невероятно трудно ориентироваться в системе.
Кстати, я знаю, что Script Security блокирует прямой доступ, но я могу создавать @Whitelisted
методы, и все, что есть в глобальной библиотеке vars/
, всегда так или иначе заносится в белый список.