2014-10-09 170 views
5

Jenkins如何在成功部署後重新啓動Tomcat實例?與Jenkins成功部署後重新啓動Tomcat

我已經嘗試過使用批處理腳本,但是當構建完成時Tomcat實例被終止。

+0

何時運行批處理腳本?如果你在「生成後事件」之後執行它,它應該可以工作。 – Akhil 2014-10-09 12:44:20

回答

5

你的答案在於Jenkins ProcessTreeKiller。 A more detailed explanation here

這是一個設計決定,殺死構建產生的任何進程,以維持一個乾淨的環境。不幸的是,這意味着你不能在構建之後運行一個進程(比如Tomcat)。

可以在全局範圍禁用此功能(不推薦)通過推出詹金斯這樣的:
java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

或者你可以在每個個案基礎禁用此功能,通過一個變化的環境變量啓動過程:
BUILD_ID=dontKillMe ./catalina restart

但有人報告說,改變BUILD_ID是不夠的。他們還建議取消設置:
JENKINS_COOKIE
JENKINS_SERVER_COOKIE

編輯:
可能在發揮作用的另一個問題是,當你連接到遠程shell,然後遠程shell會話啓動一個進程,一旦你(詹金斯)斷開連接,會話被終止並且會話產生的所有進程也被終止。爲了解決這個問題,你需要解除與shell會話的關聯。

一種方法是:

nohup ./catalina restart &

+0

我已經使用Jenkins ProcessTreeKiller而沒有成功。當我用這個參數啓動Jenkins時,我注意到產生的進程的行爲沒有區別。 – Joachim 2014-10-10 08:48:08

+0

你是否連接到遠程shell?編輯答案以考慮遠程shell – Slav 2014-10-10 13:18:55

1

這是我如何通過詹金斯部署後重新啓動Tomcat的。

我有兩臺服務器DEV和QA,我需要做部署並重新啓動tomcat。我有詹金斯安裝在DEV服務器。

  1. 首先您需要在Jenkins中安裝Post build task插件。
  2. 然後在你的tomcat安裝在服務器創建此腳本tomcat-restart.ksh ...

#!/bin/bash echo "*********************Restarting Tomcat70.******************" sh /apps/apache/sss-tomcat70.ksh status echo "Trying to stop Tomcat." sh /apps/apache/sss-tomcat70.ksh stop echo "Getting Tomcat Status." sh /apps/apache/sss-tomcat70.ksh status echo "Trying to Start Tomcat" sh /apps/apache/sss-tomcat70.ksh start sleep 2 echo "Getting Tomcat Status" sh /apps/apache/sss-tomcat70.ksh status

重啓動Tomcat的開發服務器上。

由於Jenkins和Tomcat安裝在同一臺機器上,我直接調用腳本。

在詹金斯去Add post-build action並選擇Post build task並在Script文本框中添加以下內容:/apps/apache/tomcat-restart.ksh

在QA服務器重新啓動Tomcat的。

由於Jenkins安裝在不同的服務器上,我正在調用腳本通過Secure Shell重新啓動Tomcat。

在詹金斯去添加post-build action選擇Post build task和腳本文本框中添加以下內容:
sshpass -p 'myPassword' ssh -tt [email protected] sudo sh /apps/apache/tomcat-restart.ksh

您需要安裝sshpass如果尚未安裝。

如果一切正常,那麼你可能會在你的Jenkins日誌中看到類似的東西。

Running script : /apps/apache/tomcat-restart.ksh 
[workspace] $ /bin/sh -xe /tmp/hudson43653169595828207.sh 

+ /apps/apache/tomcat-restart.ksh 
*********************Restarting Tomcat70.********************* 
Tomcat v7.0 is running as process ID 3552 
*********************Trying to stop Tomcat.********************* 
Stopping Tomcat v7.0 running as process ID 3552... 
*********************Getting Tomcat Status.********************* 
Tomcat v7.0 is not running 
*********************Trying to Start Tomcat********************* 
Starting Tomcat v7.0 server... 

*********************Getting Tomcat Status********************* 
Tomcat v7.0 is running as process ID 17969 

希望這會有所幫助。

相關問題