在使用jenkins进行自动化部署服务的过程中,发现调用服务器的shell命令无法正常启动tomcat,但是构建日志显示是成功执行的,而手动在服务器却是可以正常启动tomcat。

原因:jenkins默认在build结束后会kill掉所有的衍生进程

Jenkins提供了hudson.util.ProcessTree.disable和hudson.util.ProcessTreeKiller.disable两个属性来控制些特性,值为true将禁用此特性。hudson.util.ProcessTree.disable从Jenkins 1.260开始使用,而使用1.315之前的Hudson时只能使用hudson.util.ProcessTreeKiller.disable,为了版本兼容,在Jenkins 1.260后这两个属性都可能使用,建议使用1.260之的Jenkins用户使用hudson.util.ProcessTree.disable属性。

解决方案:

  1. 针对每个item:在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的tomcat进程

2.永久方案:启动jenkins 的时候禁止jenkins杀死衍生进程

● 使用java -jar启动,-Dhudson.util.ProcessTree.disable=true -jar jenkins.war
● 使用Tomcat启动,Linux系统修改catalina.sh,在环境变量的说明后,脚本开始前加上这句话
JAVA_OPTS="$JAVA_OPTS -Dhudson.util.ProcessTree.disable=true";

修改好Tomcat的配置文件后重新启动Tomcat

jenkins默认在build结束后会kill掉所有的衍生进程-LMLPHP

05-11 22:02