1. 程式人生 > >jenkins 解決構建成功後進程消失的問題

jenkins 解決構建成功後進程消失的問題

ces fig 出了 過程 clas 是我 希望 得出 PE

最近模塊拆分,獨立出了幾個服務。上線流程並不復雜,只需要在指定目錄執行bash deploy.sh master即可上線master分支。但是架不住模塊太多,每天在上線流程上也花費了不少時間,所以嘗試搭了個jenkins來自動化上線。上線時遇到了一個小坑,jenkins已經輸出了啟動成功的日誌,但是實際上服務並沒有跑起來,也就是說服務啟動以後又被kill掉了。上網找了找資料,得出結論是jenkins殺掉了剛啟動的服務。

服務被殺的原因是:jenkins默認會在構建完成後殺死構建過程中由jenkins中的shell命令觸發的衍生進程。

我在jenkins中調用bash deploy.sh master,雖然有supervisord保護我的服務,但是jenkins將supervisord和服務一同殺掉了。在網上找到了兩種解決辦法,親測有效,兩種方法中我個人更推薦第二種,方法三是我自己想到的,親測也有效喲~:

方法一:

修改配置,啟動jenkins時禁止其殺死衍生進程

在/etc/sysconfig/jenkins中加入參數-Dhudson.util.ProcessTree.disable=true

即java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

方法二:

修改構建號,使jenkins找不到衍生進程

OLD_BUILD_ID=$BUILD_ID

BUILD_ID=dontKillMe

bash deploy.sh master

BUILD_ID=$OLD_BUILD_ID

方法三:

這是我自己想到的方法,也確實生效了。我們訪問生產環境需要先登錄跳板機器,然後從跳板機器跳到線上服務器,所以我把jenkins部署到跳板機上,在jenkins的shell腳本中使用ssh腳本訪問線上機器。

sh online.sh

cd webserver/server/***

bash deploy.sh master

這樣啟動之後jenkins殺死的是跳板機上衍生出的ssh進程而不會影響真正線上服務器的進程

希望對大家有所幫助~

jenkins 解決構建成功後進程消失的問題