gpt4 book ai didi

jenkins - 从 Pipeline 脚本方法获取控制台 Logger(或 TaskListener)

转载 作者:行者123 更新时间:2023-12-05 00:46:54 27 4
gpt4 key购买 nike

如果我在 Pipeline 脚本 ( Jenkinsfile ) 中有一个 Pipeline 脚本方法,我的 Global Pipeline Library 的 vars/或在 src/类,如何获取OutputStream控制台日志?我想直接写入控制台日志。

我知道我可以 echoprintln ,但为此我需要在没有额外输出的情况下编写。我还需要能够通过 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)但我不在Step , 我在 CpsScript (即 WorkflowScriptJenkinsfile )。
  • CpsFlowExecution 中找到它从 DSL 获得实例注册为 steps script-property,但我不知道如何发现 TaskListener在创建时传递给它

  • 怎么这么难?我错过了什么?有太多间接的魔法,我发现导航系统非常困难。

    顺便说一句,我知道直接访问被 Script Security 阻止,但我可以创建 @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}")

    结果:
    Listener: CloseableTaskListener[org.jenkinsci.plugins.workflow.log.BufferedBuildListener@6e9e6a16 / org.jenkinsci.plugins.workflow.log.BufferedBuildListener@6e9e6a16] Logger: java.io.PrintStream@423efc01

    关于jenkins - 从 Pipeline 脚本方法获取控制台 Logger(或 TaskListener),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172023/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com