使用Jenkins的任务自动跑脚本后发现,服务没有起来

在Jenkins的使用中,遇到过的一个场景是:在web代码更改以后,能自动的部署到测试服务器,咱们写了run.sh脚原本重启服务,在使用Jenkins的任务自动跑这个脚本后发现,服务没有起来。开始觉得是run.sh脚本的问题,可是直接执行是没有问题的;以后一直查运行环境差别,发现也不是这个缘由;到后来才怀疑到Jenkins任务结束时候自动关掉了全部的子进程。经过如下shell脚本片断解决了问题:web

1.第一种方案: #临时改变BUILD_ID值,使得Jenkins不会找到并结束掉run.sh启动的后台进程
OLD_BUILD_ID=$BUILD_ID
echo $OLD_BUILD_ID
BUILD_ID=dontKillMe
./run.sh restart
#改回原来的BUILD_ID值
BUILD_ID=$OLD_BUILD_ID
echo $BUILD_IDshell

问题的根本在因而Jenkins使用processTreeKiller杀掉了全部子进程,并且这是Jenkins的默认行为。其实回头来看这个问题,就发现Jenkins的作法很是合理。当一次build异常结束,或被人终止时,必然须要结束全部此次build启动的子进程。下面的link提供了更多细节,以及解决方法。https://wiki.jenkins-ci.org/display/JENKINS/ProcessTreeKillertomcat

2.第二种方案:服务器

使用jenkins的批处理或者ant 启动tomcat失败。查了一下缘由说是 jenkins在脚本执行结束后,就认为任务结束了,可是脚本启动的相关子程序仍然在运行。因为jenkins认为任务已经结束了,就结束了该构建相关的子进程。测试

       解决办法:增长一个环境变量。ui

        BUILD_ID=pleaseDontKillMe and it works like a charm。spa

      能够添加在执行任务的节点设置中添加该变量。rest

 

解决详细步骤:进程

   前置说明:我是经过slave节点来启动tomcat 的,因此再slave节点配置上述环境变量。ci

 

 

相关文章
相关标签/搜索