最近模塊拆分,獨立出了幾個服務,上線流程并不復雜,只需要在指定目錄執行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行程而不會影響真正線上服務器的行程
希望對大家有所幫助~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/225257.html
標籤:其他
上一篇:Linux中 SonarQube代碼質量管理平臺以及C++插件安裝
下一篇:自動化管理之禪-新人培養
