本地脚本运行成功,但Jenkins运行脚本未启动服务的解决方法

一、现象描述

本地脚本运行成功,服务可启动;但使用Jenkins自动部署项目时,发现服务未启动(服务并没有启动,而非启动失败,因为未发现日志信息)。

二、解决此问题的过程

1、Jenkins build结束后会kill掉衍生进程

Jenkins wiki描述,Jenkins build结束后会kill掉衍生进程。尝试重置变量BUILD_ID,避免Jenkins kill进程。

image.png

1.1、由于我使用的是Jenkins Pipline,所以应该使用JENKINS_NODE_COOKIE代替BUILD_ID:

image.png

Jenkins执行成功了,但是在服务器上却发现cp-device服务并未启动。

1.2、改成通过shell脚本启动:

image.png

Jenkins执行成功了,但是在服务器上发现cp-device服务依旧未启动。

1.3、启动时设置禁用进程树:

-Dhudson.util.ProcessTree.disable=true

image.png

Jenkins执行成功了,但是在服务器上发现cp-device服务依旧并未启动。。。

o(╥﹏╥)o

o(╥﹏╥)o

o(╥﹏╥)o

难道是方向错了?不能够吧。。

2、Jenkins读取不到/etc/profile的环境变量

谢天谢地,端午节前终于在网上找到了解决方案:
《本地脚本运行成功,Jenkins运行脚本启动服务失败的解决方法》

尝试在启动服务前执行:source /etc/profile(使环境变量生效)
image.png
终于成功了,原来是环境变量的问题!!!

可以好好过个端午节了,好开心(。◕ˇ∀ˇ◕)

3、换个方式解决

节后第一天,试了几个服务,发现在Jenkinsfile中使用source /etc/profile后,服务已经启动成功了,但是Jenkins流水线却还未停止(好几分钟了还在运行中,只好手动停止)。

image.png

为什么要执行source /etc/profile?因为环境变量问题。

可是我之前在另一台测试服务A上使用Jenkins部署时,没遇到这个问题呀!

刚好看到下图中的方法3

image.png

于是参考服务器测试服务A的Jenkinsfile写法,改为使用软链接的方式,将“nohup java -jar xxx”改为“nohup /usr/bin/java -jar xxx”,也能成功启动服务了(^-^)V

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享