jenkins无法重启tomcat

作者: 栾呱呱 | 来源:发表于2017-12-03 11:44 被阅读942次

    背景:

    我们经常发现,利用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

    相关文章

      网友评论

        本文标题:jenkins无法重启tomcat

        本文链接:https://www.haomeiwen.com/subject/wilobxtx.html