2015-05-14 64 views
0

我有一個執行「foo.sh」和「bar.sh」的Jenkins作業,這些腳本分別生成「foo.log」,「bar.log」。 foo.sh和bar.sh是長時間運行的作業,我不想在jenkins的「Console Output」視圖中統一查看它們的日誌文件。在「控制檯輸出」中包含工作區.log文件

我知道我可以將這些日誌歸檔爲構建工件,但我想從一個視圖 - 控制檯輸出監視所有3個日誌(「Console Output」/ stdout,foo.log和bar.log)。

是否有插件或配置選項,讓我這樣做?


注:foo.shbar.sh明顯佔位符,但我怕他們從供應商處是,我無法修改它們來調整記錄行爲。

回答

2

假設你的文件是$WORKSPACE下:
tail -F *.log

編輯:
或者你可以考慮重新寫,但你foo.shbar.sh,而不是重定向到日誌文件,tee安慰日誌文件。

echo "doing stuff" 2>&1|tee -a foo.log
上面會打印到控制檯(其顯示在詹金斯控制檯輸出),並重定向到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在調用tail之前可能會打印超過10行的行。使用tail -n增加起始行數。
  • 如果檢測到多個tail -F foo.log,則「殺手」將會中斷。你應該修改它以更加強大
+0

'tail -f'實際上是我想要做的,但我可以在不阻止構建的情況下做到這一點,'tail -f'如何知道什麼時候構建完成?當然,我不想SSH進入服務器! – xconspirisist

+0

@xconspirisist用'tee'建議編輯 – Slav

+0

對不起,先生,我沒有在我原來的問題中說過 - 我不能修改腳本(顯然他們是佔位符)在stdout上輸出(或者我的問題會被解決! – xconspirisist