当前位置: 首页 > 工具软件 > Java-SSH > 使用案例 >

Jenkins 项目构建成功但SSH远程执行java -jar程序未能后台运行问题

骆昊阳
2023-12-01

通过远程执行sh脚本,执行如下命令:

java -jar xxxxx.jar

通过判断返回值发现命令执行成功,但是进入服务器后使用 jps -l 并未发现相关的java程序启动。
经过查阅资料发现,Jenkins 有一个 ProcessTreeKiller 特性,Jenkins有一些特殊的方法显示能够看到进程构建过程中产生的进程,并结束掉它们。如实是通过 java -jar jenkins.war 启动的,可以添加如下参数全局禁用该功能(推荐)。

java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war

也可以通过加入环境变量的方式解决:

# 普通项目使用BUILD_ID
export BUILD_ID=dontKillMe  /usr/bin/java -jar xxx.jar
# 流水线使用JENKINS_NODE_COOKIE
export JENKINS_NODE_COOKIE=dontKillMe /usr/bin/java -jar xxx.jar

ProcessTreeKiller工作原理解读
在Jenkins创建新的进程的时候会获得并创建环境变量副本,在进程执行过程中会创建一个特殊的环境变量,在任务结束的时候,Jenkins会获取到这个特殊的环境变量,并以此区分那些是构建时产生的进程,在任务结束的时候结束掉该进程。

 类似资料: