【问题标题】:Include workspace .log files in "Console Output"在“控制台输出”中包含工作区 .log 文件
【发布时间】:2015-05-14 15:53:58
【问题描述】:

我有一个执行“foo.sh”和“bar.sh”的 Jenkins 作业,这些脚本分别生成“foo.log”和“bar.log”。 foo.sh 和 bar.sh 是长时间运行的作业,我不想在 jenkins 的“控制台输出”视图中统一查看它们的日志文件。

我知道我可以将这些日志存档为构建工件,但我想从一个视图(控制台输出)监控所有 3 个日志(“控制台输出”/stdout、foo.log 和 bar.log)。

是否有插件或配置选项可以让我这样做?


注意:foo.shbar.sh 显然是占位符,但恐怕它们来自供应商,我无法修改它们以调整日志记录行为。

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    假设你的文件在$WORKSPACE:
    tail -F *.log

    编辑:
    或者你可以考虑重写你的foo.shbar.sh,而不是重定向到日志文件,tee到控制台日志文件。

    echo "doing stuff" 2>&1|tee -a foo.log
    以上将打印到控制台(显示在 Jenkins 控制台输出中),并重定向到 foo.log

    编辑 2:
    如果您无法控制foo.shbar.sh,则需要一个包装脚本来使用一些技巧来启动它们。

    基本上,在您将foo.sh 发送到后台(以便我们可以继续)之后,在您发送tail 日志之前,您需要确保tail 会被杀死。我们通过启动另一个后台进程来监控foo.sh 进程并杀死tail(尚未在脚本中启动)来做到这一点。由于我们还没有启动tail,所以我们并不知道它的PID是什么,所以我们通过命令行来引用它

    # Send foo.sh to background and record the PID
    echo "Launching foo.sh to background"
    nohup ./foo.sh &
    foo_pid=$!
    echo "Foo PID to monitor=$foo_pid"
    
    # Launch a statement that will run ever 3 seconds to monitor status 
    # of foo.sh, and if foo.sh finished, then kill a 'future' tail command
    echo "Launching tail-killer to background"
    nohup $(sleep 3; while kill -0 $foo_pid; do sleep 3; done; kill $(ps --no-heading -C "tail -F foo.log" | awk '{print $1}') ) &
    
    # Tail foo.sh's log
    echo "Launching tail to monitor foo.sh"
    echo
    tail -F foo.log
    echo
    
    # Get the return code of foo.sh
    wait $foo_pid
    echo "Foo.sh returned with $?
    

    注意事项/改进:

    • “杀手”进程每 3 秒运行一次。出于性能原因,您可能希望增加该值
    • Foo.sh 可以在启动后打印超过 10 行,在调用 tail 之前。使用tail -n增加起始行数。
    • 如果检测到多个tail -F foo.log,“杀手”将中断。您应该修改它以使其更健壮

    【讨论】:

    • tail -f 当然是我想要做的,但我可以在不阻止构建的情况下做到这一点,tail -f 如何知道构建何时完成?我当然不想通过 SSH 连接到服务器!
    • @xconspirisist 编辑tee 建议
    • 啊,对不起,先生,我没有在最初的问题中说明 - 我无法修改脚本(显然它们是占位符)以输出到标准输出(否则我的问题将得到解决!
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    相关资源
    最近更新 更多