Jenkins中通过execute shell无法启动进程-解决方案合集

一、问题描述 jenkins使用publish over ssh,执行shell,没报错,日志输出成功 23:43:13 SSH: EXEC: completed after 10,225 ms 23:43:13 SSH: Disconnecting configuration [swarm2] ... 23:4...

一、问题描述

jenkins使用publish over ssh,执行shell,没报错,日志输出成功

23:43:13 SSH: EXEC: completed after 10,225 ms

23:43:13 SSH: Disconnecting configuration [swarm2] ...

23:43:13 SSH: Transferred 1 file(s)

23:43:13 Finished: SUCCESS

attachments-2024-04-A6gD15Lx6616763c15f4c,png

这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。


二、解决方法


1.重设环境变量build_id


方式一:(会出现timed out or was interrupted after 120,001 ms连接超时):


BUILD_ID=dontKillMe

sh /home/cloud/exec/test.sh

脚本内容为:


echo "执行.........................."

java -jar  /home/cloud/run/spring-boot-0.0.1-SNAPSHOT.jar


方法二:

sh /home/cloud/exec/test.sh

脚本内容为:


export BUILD_ID=dontKillMe

nohup java -jar  /home/cloud/run/spring-boot-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

#奇怪如果去掉以下延时,就会被jenkins杀掉.尴尬。。。

sleep 10s

方式三:

通过daemonize方式来免杀


(1)test.sh脚本中不行

daemonize -E BUILD_ID=dontKillMe nohup java -jar  /home/cloud/run/spring-boot-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

sleep 10s


(2)test.sh脚本中不行

daemonize -E BUILD_ID=dontKillMe -o test.log -c /home/cloud/run  /home/cloud/run/spring-boot-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &


(3)execute shell输入框中不行

daemonize -E BUILD_ID=dontKillMe -o test.log -c /home/cloud/run  /home/cloud/exec/test.sh


2.临时改变BUILD_ID值,使得jenkins不会找到并结束掉run.sh启动的后台进程

OLD_BUILD_ID=$BUILD_ID

echo $OLD_BUILD_ID

BUILD_ID=dontKillMe

sh /home/cloud/exec/test.sh

#改回原来的BUILD_ID值

BUILD_ID=$OLD_BUILD_ID

echo $BUILD_ID

test.sh内容如下:

echo "执行.........................."

nohup java -jar  /home/cloud/run/spring-boot-0.0.1-SNAPSHOT.jar >/dev/null 2>&1 &

#奇怪如果去掉以下延时,就会被jenkins杀掉.尴尬。。。

sleep 10s

3.通过Jenkins提供的启动参数禁用杀死子进程的特性


3.1使用java -jar启动,-Dhudson.util.ProcessTree.disable=true -jar jenkins.war

3.2使用Tomcat启动,Linux系统修改catalina.sh,在环境变量的说明后,脚本开始前加上JAVA_OPTS="$JAVA_OPTS -Dhudson.util.ProcessTree.disable=true";Windows系统修改catalina.bat,在环境变量的说明后,脚本开始前加上set JAVA_OPTS=%JAVA_OPTS% "-Dhudson.util.ProcessTree.disable=true";修改好Tomcat的配置文件后重新启动Tomcat

坑:

由于jenkins构建完毕后会杀掉所有启动的进程,可以通过改变BUILD_ID的值来防止后台进程被杀死

如果采用maven工程进行构建,修改BUILD_ID无效,后台进程随着jenkins构建完成后仍被杀死



  • 发表于 2024-04-10 19:21
  • 阅读 ( 461 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
shitian
shitian

662 篇文章

作家榜 »

  1. shitian 662 文章
  2. 石天 437 文章
  3. 每天惠23 33 文章
  4. 小A 29 文章