成功部署后,如何让Jenkins重新启动Tomcat实例?
我已经尝试过使用批处理脚本,但是在构建完成时会杀死Tomcat实例。
答案 0 :(得分:9)
你的答案在于Jenkins ProcessTreeKiller。一个more detailed explanation here。
设计决定是杀死构建产生的任何进程以维护干净的环境。不幸的是,这意味着您无法在构建之后运行进程(例如Tomcat)。
您可以通过启动Jenkins来全局禁用此功能(不推荐):
java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war
或者您可以通过使用更改的环境变量启动流程来逐个禁用此功能:
BUILD_ID=dontKillMe ./catalina restart
有些人报告说,改变BUILD_ID
是不够的。他们还建议不要设置:
JENKINS_COOKIE
JENKINS_SERVER_COOKIE
<强> 编辑: 强>
可能存在的另一个问题是,当您连接到远程shell并在该远程shell会话中启动进程时,一旦您(Jenkins)断开连接,会话就会被终止,并且会话产生的所有进程也将被终止。要解决该问题,您需要取消该进程与shell会话的关联。
一种方法是:
nohup ./catalina restart &
答案 1 :(得分:1)
这是我在通过jenkins部署后重新启动Tomcat的方法。
我有两个服务器DEV和QA,我需要进行部署并重启tomcat。我在DEV服务器上安装了Jenkins。
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
在DEV服务器上重新启动Tomcat。
由于Jenkins和Tomcat安装在同一台机器上,我直接调用该脚本。
在Jenkins中,转到Add post-build action
并选择Post build task
,然后在Script
文本框中添加以下内容:/apps/apache/tomcat-restart.ksh
在QA服务器中重新启动Tomcat。
由于Jenkins安装在不同的服务器上,我调用脚本通过Secure Shell重启Tomcat。
在Jenkins中,转到添加post-build action
选择Post build task
,然后在脚本文本框中添加以下内容:
sshpass -p 'myPassword' ssh -tt username@hostname 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
希望这有帮助。