2014-01-14 136 views
4

我有一個Jenkins主/從設置,它一直很開心,在某些Linux機器上運行Oracle導入。Jenkins構建永不完成

我剛剛添加了一個新的從節點,並試圖在這個新節點上運行我們現有的數據庫導入作業。這項工作由三個子項目組成;第一個運行一些執行shell,複製文件和更改權限,這當前成功完成,第二個運行一個以Oracle impdp結尾的execute shell。 impdp完成(db存在且ps -ef不再顯示impdp正在運行),但Jenkins子項目永遠不會結束。用戶界面恰好坐在那裏,時鐘在旋轉。

我試過在impdp後面添加一個回顯,這也正確執行,但子項目仍然沒有結束。

如果我添加生成後的電子郵件通知,它不會發送。

第三個子項目永遠不會到達。

這可能是什麼原因以及如何調試發生了什麼?

+0

從你的描述我猜你的構建中的一些工具正在等待輸入 - 是/否提示或類似的。如果您使用新的從站上的Jenkins帳戶手動運行構建命令,會發生什麼情況? –

+0

這是奇怪的事情。最後一條命令是一個Oracle impdp,當我手動在slave上運行它時,以及當我在Jenkins中查看控制檯時,我看到「Job」SYSTEM「。」SYS_IMPORT_SCHEMA_03「已於2014年1月14日星期二12:03:19成功完成已用0 0:01:19「。我也可以在Execute Shell中添加一個簡單的'echo'Job',然後執行/回顯。 –

+0

就好像其他任何一個job/process/thing在那之後運行(但我不知道在哪裏配置或如何找到它),或者Execute Shell需要一些退出或返回代碼...... –

回答

3

事實證明,這是可怕的事情:-)

完成工作後,詹金斯試圖殺死它產生的所有進程。爲了識別它們,它經歷了操作系統中的所有進程,從/proc/<pid>/environ(這是一個Linux機器)讀取,其中包含進程的環境變量,並將它們與它爲Jenkins進程設置的環境進行比較。

問題是我們的數據庫服務器上運行着一個特定的Oracle進程,如果您試圖從/proc/pid/environ中讀取它,它將永遠掛起 - 這是詹金斯代碼將卡住的地方。

我不知道它爲什麼會陷入這樣的困境,也沒有我們的DBA。我們重新啓動它,現在它工作。

0

您可以將set +x添加到shell腳本的頂部,以查看哪些命令實際執行。這樣你就可以很容易地從輸出中看到哪個命令被阻塞了。

+0

謝謝,但我已經在使用+ x,這就是爲什麼我可以看到,無論最後一個命令是在執行shell中運行(impdp,echo ...)我現在發現我甚至可以在現有的Execute Shell構建步驟之後添加一個新的Execute Shell構建步驟,* *將執行,但是子項目作爲一個整體尚未完成。這很奇怪。 –

4

在我們的案例中,這些工作將宣佈「完成:成功」,但接下來繼續與一些未知的Jenkins業務再過10到20分鐘。在進行更詳細的日誌記錄之後,我們發現它與不合適的LogRotator有關。

我們有成千上萬的舊版本,並且正在刪除那些超過特定天數的文物。由於處理舊版本的方式,Jenkins會搜索舊版本的所有列表,即使它們已經刪除了它們的工件。

有問題是現在固定與此相關的:https://issues.jenkins-ci.org/browse/JENKINS-22607

截至目前我沒有看到它在釋放,但如果你有這個問題,臨時解決方法是關閉刪除。