关于 jenkins 中 shell 启动 tomcat,明明成功了 却被杀掉

本贴最后更新于 679 天前,其中的信息可能已经沧海桑田

在 Jenkins 的使用中,遇到过的一个场景是:使用 python 自动执行 Tomcat bin 目录下的 startup.bat 开启批处理,服务开启成功后就随着 python 脚本执行结束该服务就被杀死,开始以为是 python 脚本的问题,但是直接执行是没有问题的;之后一直查运行环境差异,发现也不是这个原因;到后来才怀疑到 Jenkins 任务结束时候自动关掉了所有的子进程。通过以下 shell 脚本片段解决了问题:

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

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

2.第二种方案:

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

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

    BUILD_ID=pleaseDontKillMe and it works like a charm。

  可以添加在执行任务的节点设置中添加该变量。

解决详细步骤:

前置说明:我是通过 slave 节点来启动 Tomcat 的,所以再 slave 节点配置上述环境变量。

**
**

**
**在 Jenkins 的使用中,遇到过的一个场景是:使用 python 自动执行 Tomcat bin 目录下的 startup.bat 开启批处理,服务开启成功后就随着 python 脚本执行结束该服务就被杀死,开始以为是 python 脚本的问题,但是直接执行是没有问题的;之后一直查运行环境差异,发现也不是这个原因;到后来才怀疑到 Jenkins 任务结束时候自动关掉了所有的子进程。通过以下 shell 脚本片段解决了问题:

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

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

2.第二种方案:

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

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

    BUILD_ID=pleaseDontKillMe and it works like a charm。

  可以添加在执行任务的节点设置中添加该变量。

解决详细步骤:

前置说明:我是通过 slave 节点来启动 Tomcat 的,所以再 slave 节点配置上述环境变量。

**
**

**
**

原文链接:https://blog.csdn.net/qq_25559693/article/details/72844340

  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    35 引用 • 37 回帖
回帖
请输入回帖内容...