2017-10-04 55 views
0

我試圖去掉我的詹金斯輸出。感謝Is it possible to capture the stdout from the sh DSL command in the pipeline,我知道我可以將每個sh命令的輸出發送到一個文件。但是,命令本身仍然會寫入Jenkins輸出而不是文件。例如:是否可以將Jenkins管道中的sh DSL命令的所有輸出發送到文件?

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

原樣,這導致詹金斯輸出看起來像這樣:

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

但是,如果我將輸出發送到一個文件,我得到這樣詹金斯輸出:

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

和output.log看起來像這樣:

Hello World! 
<helloworld output> 
<seeyoulater output> 

這會導致我的Jenkins輸出不那麼混亂,但output.log最終在腳本輸出之間沒有任何分隔符。我想我可以在每個命令之前有echo <command>,但這隻意味着我的詹金斯輸出再次變得混亂。

有什麼辦法可以將sh DSL命令的整個輸出發送到文件嗎?基本上像sh '''<commands here>''' > output.log是我正在尋找的東西。

回答

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顯示了在詹金斯輸出,但命令的其餘部分沒有。從那裏開始,只需添加足夠的echo語句即可使output.log充分可讀。

相關問題