是否可以将Jenkins管道中的sh DSL命令的所有输出发送到文件?

时间:2017-10-04 19:29:42

标签: jenkins jenkins-pipeline

我正试图消除我的Jenkins输出。感谢Is it possible to capture the stdout from the sh DSL command in the pipeline,我知道我可以将每个sh命令的输出发送到文件。但是,命令本身仍将写入Jenkins输出而不是文件。例如:

sh '''echo "Hello World!"
    ./helloworld
    ./seeyoulater
'''

原样,这导致Jenkins输出看起来像这样:

echo "Hello World!"
Hello World!
./helloworld
<helloworld output, possibly many lines>
./seeyoulater
<seeyoulater output, possibly many lines>

但是,如果我将输出发送到文件,我会得到像这样的Jenkins输出:

echo "Hello World!" > output.log
./helloworld >> output.log
./seeyoulater >> output.log

和output.log看起来像这样:

Hello World!
<helloworld output>
<seeyoulater output>

这导致我的Jenkins输出不那么混乱,但是output.log最终在脚本输出之间没有任何分隔符。我想在每个命令之前我可以echo <command>,但这只是意味着我的Jenkins输出再次变得更加混乱。

有没有办法将sh DSL命令的整个输出发送到文件?基本上像sh '''<commands here>''' > output.log这样的东西就是我正在寻找的东西。

1 个答案:

答案 0 :(得分:0)

我无法找到解决方案,但我确实找到了解决方法。如sh command documentation中所述,默认使用-xe标志运行。 -x标志是Jenkins输出中显示命令的原因。补救措施是添加set +x

sh '''set +x
    echo "Hello World!" > output.log
    ./helloworld >> output.log
    ./seeyoulater >> output.log
'''

set +x显示在Jenkins输出中,但其余命令则不显示。从那里开始,只需在其中添加足够的echo语句即可使output.log具有足够的可读性。