我有一个Jenkins作业,它执行"foo.sh“和"bar.sh",这些脚本分别生成"foo.log”和"bar.log“。foo.sh和bar.sh是长期运行的作业,我不想在jenkins的"Console Output“视图中统一查看它们的日志文件。
我知道我可以将这些日志存档为构建工件,但我希望从一个视图控制台输出监视所有3条日志(“控制台输出”/stdout、foo.log和bar.log)。
是否有一个插件或配置选项可以让我这样做?
注意:foo.sh和bar.sh显然是占位符,但恐怕它们来自供应商,我不能修改它们来调整日志记录行为。
发布于 2015-05-14 15:59:09
假设您的文件在$WORKSPACE下
tail -F *.log
编辑:
或者您可以考虑重写您的foo.sh和bar.sh,而不是重定向到日志文件,而是将tee重定向到控制台和日志文件。
echo "doing stuff" 2>&1|tee -a foo.log
上面将打印到控制台(在Jenkins控制台输出中显示),然后重定向到foo.log
编辑2:
如果您无法控制foo.sh和bar.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 $?Considerations/improvements:
Foo.sh在启动后,在调用tail之前,可以打印超过10行。使用tail -n增加起跑线数。tail -F foo.log,“杀手”就会崩溃。您应该修改它以使其更健壮。https://stackoverflow.com/questions/30241757
复制相似问题