我正试图消除我的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
这样的东西就是我正在寻找的东西。
答案 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
具有足够的可读性。