Jenkins中通过execute shell无法启动进程-解决方案合集
一、问题描述jenkins使用publish over ssh,执行shell,没报错,日志输出成功23:43:13 SSH: EXEC: completed after 10,225 ms23:43:13 SSH: Disconnecting configuration [swarm2] ...23:43:13 SSH: Transferred 1 file(s)23:43:13 Fini...
·
一、问题描述
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
但问题就是,在服务器上,该进程没有运行。。很尴尬。在jenkins上发现了问题所在
这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。
二、解决方法
1.重设环境变量build_id
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构建完成后仍被杀死
参考:
https://blog.csdn.net/wangbin0016/article/details/41948171
https://blog.csdn.net/houyefeng/article/details/52269366
https://www.jianshu.com/p/a7d7df97fe4b
https://blog.csdn.net/zhangpan_soft/article/details/79575981
更多推荐
已为社区贡献12条内容
所有评论(0)