jenkins無法重啟tomcat

背景:

我們經常發現,利用jenkins執行重啟tomcat的命令一直失敗,job構建成功了,但是事實上tomcat并沒有正確的重新啟動。原因是這樣:jenkins在執行sh腳本的時候,如果腳本中有啟動后臺進程的情況,例如tomcat的關閉和啟動,jenkins在job構建結束之后,會kill所有的腳本里面衍生出的子進程。

場景一:jenkins和tomcat部署在在相同的機器

jenkins有一些環境變量,例如JOB_NAME、WORKSPACE、BUILD_ID等,一個小的技巧就是在執行sh shutdown.sh的命令前面,加上如下一條命令,修改環境變量BUILD_ID的值,這樣,衍生出來的子進程就不會被kill了。

BUILD_ID=dontKillMe
舉個簡單的例子
jenkins

sleep 10目的是為了讓shutdown腳本執行結束,這么寫是為了方便。為了確保這一點,讀者可以用下面命令殺掉進程。

ps -ef | grep xxx | awk '{print $2}' | xargs kill -9

場景二:jenkins和tomcat部署在在不同的機器

這種場景下,會發現使用上面的方法不生效,這里介紹一種親自試驗過的方法。
假如部署jenkins的機器是A,部署tomcat的機器是B。那可以在A機器上寫一個腳本,把需要在B機器上執行的命令封裝在A機器上的這個腳本里面,這樣也能保證衍生進程正確執行結束。

舉個簡單的例子

A機器上touch一個腳本,譬如tomcat-restart.sh

#!/bin/sh
# restart romote tomcat
# ssh to remote server
ssh work@xx.xxx.xx.xxx <<EOF
        cd /home/work/services/apache-tomcat-8.5.8
        ./bin/shutdown.sh
        sleep 10
        ./bin/startup.sh
        exit
EOF

注意別忘記了最后的EOF(可以用任意字符串替換),表示之間的命令是在B機器上執行的。當然,腳本正確執行的前提是A和B之間建立了SSH的信任關系,如果不熟悉的話,可以自行去百度一下。然后,在execute shell里面執行tomcat-restart.sh腳本即可。

jenkins
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容