使用Jenkins的任務自動跑腳本後發現,服務沒有起來

在Jenkins的使用中,遇到過的一個場景是:在web代碼更改以後,能自動的部署到測試服務器,咱們寫了run.sh腳原本重啓服務,在使用Jenkins的任務自動跑這個腳本後發現,服務沒有起來。開始覺得是run.sh腳本的問題,可是直接執行是沒有問題的;以後一直查運行環境差別,發現也不是這個緣由;到後來才懷疑到Jenkins任務結束時候自動關掉了全部的子進程。經過如下shell腳本片斷解決了問題:web

1.第一種方案: #臨時改變BUILD_ID值,使得Jenkins不會找到並結束掉run.sh啓動的後臺進程
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
./run.sh restart
#改回原來的BUILD_ID值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_IDshell

問題的根本在因而Jenkins使用processTreeKiller殺掉了全部子進程,並且這是Jenkins的默認行爲。其實回頭來看這個問題,就發現Jenkins的作法很是合理。當一次build異常結束,或被人終止時,必然須要結束全部此次build啓動的子進程。下面的link提供了更多細節,以及解決方法。https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKillertomcat

2.第二種方案:服務器

使用jenkins的批處理或者ant 啓動tomcat失敗。查了一下緣由說是 jenkins在腳本執行結束後,就認爲任務結束了,可是腳本啓動的相關子程序仍然在運行。因爲jenkins認爲任務已經結束了,就結束了該構建相關的子進程。測試

       解決辦法:增長一個環境變量。ui

        BUILD_ID=pleaseDontKillMe and it works like a charm。spa

      能夠添加在執行任務的節點設置中添加該變量。rest

 

解決詳細步驟:進程

   前置說明:我是經過slave節點來啓動tomcat 的,因此再slave節點配置上述環境變量。ci

 

 

相關文章
相關標籤/搜索