Cra*_*ger 7 jenkins jenkins-groovy jenkins-pipeline
如果我在管道脚本 ( 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()}"
Run Code Online (Sandbox Code Playgroud)
印刷
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
Run Code Online (Sandbox Code Playgroud)StepContext
我知道你可以从via获取它,context.get(TaskListener.class)
但我不在a中Step
,我在 a CpsScript
(即WorkflowScript
ie Jenkinsfile
)中。
CpsFlowExecution
从注册DSL
为脚本属性的实例中找到它steps
,但我不知道如何发现TaskListener
创建它时传递给它的怎么这么难?我缺少什么?有太多的间接魔法,我发现导航这个系统非常困难。
顺便说一句,我知道直接访问被脚本安全性阻止,但我可以创建@Whitelisted
方法,并且全局库中的任何内容vars/
总是被列入白名单。
您可以从 Jenkins 根对象访问构建对象:
def listener = Jenkins.get()
.getItemByFullName(env.JOB_NAME)
.getBuildByNumber(Integer.parseInt(env.BUILD_NUMBER))
.getListener()
def logger = listener.getLogger() as PrintStream
logger.println("Listener: ${listener} Logger: ${logger}")
Run Code Online (Sandbox Code Playgroud)
结果:
Listener: CloseableTaskListener[org.jenkinsci.plugins.workflow.log.BufferedBuildListener@6e9e6a16 / org.jenkinsci.plugins.workflow.log.BufferedBuildListener@6e9e6a16] Logger: java.io.PrintStream@423efc01
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4269 次 |
最近记录: |