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

在使用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

3. 在启动jenkins 的时候禁止jenkins杀死衍生进程(此方法未测试,也是解决办法之一)

 

    修改/etc/sysconfig/jenkins配置,在JENKINS_JAVA_OPTIONS中加入-Dhudson.util.ProcessTree.disable=true。需要重启jenkins生效

 

    此方法配置一次后,所有的job都无需设置BUILD_ID,就能够防止jenkins杀死启动的java进程

 

 




posted @ 2019-07-24 18:18  巴黎爱工作  阅读(4043)  评论(0编辑  收藏  举报