您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页jenkins无法重启tomcat

jenkins无法重启tomcat

来源:二三娱乐

背景:

我们经常发现,利用jenkins执行重启tomcat的命令一直失败,job构建成功了,但是事实上tomcat并没有正确的重新启动。原因是这样:jenkins在执行sh脚本的时候,如果脚本中有启动后台进程的情况,例如tomcat的关闭和启动,jenkins在job构建结束之后,会kill所有的脚本里面衍生出的子进程。

场景一:jenkins和tomcat部署在在相同的机器

jenkins有一些环境变量,例如JOB_NAME、WORKSPACE、BUILD_ID等,一个小的技巧就是在执行sh shutdown.sh的命令前面,加上如下一条命令,修改环境变量BUILD_ID的值,这样,衍生出来的子进程就不会被kill了。

BUILD_ID=dontKillMe
举个简单的例子
jenkins

sleep 10目的是为了让shutdown脚本执行结束,这么写是为了方便。为了确保这一点,读者可以用下面命令杀掉进程。

ps -ef | grep xxx | awk '{print $2}' | xargs kill -9

场景二:jenkins和tomcat部署在在不同的机器

这种场景下,会发现使用上面的方法不生效,这里介绍一种亲自试验过的方法。
假如部署jenkins的机器是A,部署tomcat的机器是B。那可以在A机器上写一个脚本,把需要在B机器上执行的命令封装在A机器上的这个脚本里面,这样也能保证衍生进程正确执行结束。

举个简单的例子

A机器上touch一个脚本,譬如tomcat-restart.sh

#!/bin/sh
# restart romote tomcat
# ssh to remote server
ssh work@xx.xxx.xx.xxx <<EOF
        cd /home/work/services/apache-tomcat-8.5.8
        ./bin/shutdown.sh
        sleep 10
        ./bin/startup.sh
        exit
EOF

注意别忘记了最后的EOF(可以用任意字符串替换),表示之间的命令是在B机器上执行的。当然,脚本正确执行的前提是A和B之间建立了SSH的信任关系,如果不熟悉的话,可以自行去百度一下。然后,在execute shell里面执行tomcat-restart.sh脚本即可。

jenkins

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务