Jenkins执行远程脚本启动服务失败的问题解决

最近也在整合Jenkin + Gitlab自动运维部署的实现,就差最后一步了,死活不能启动服务!网上找了好久的解决方案,都说Jenkins在任务结束时会杀掉衍生进程,需要在“Exec command”的脚本框里加上“export BUILD_ID=dontKillMe”的配置,以告诉Jenkins不要杀掉服务进程,这完全是扯淡!

./jenkin-deploy -c false -l false -s 192.168.214.214 -n notify-center -v 1.0.1-SNAPSHOT 
-i notify-center -e http://192.168.112.140:18761] ...
2019-07-08 15:37:26 开始问询Eureka注册中心关于服务【notify-center】的注册信息
2019-07-08 15:37:26 Eureka注册中心查询结果:未查询到服务注册信息,将直接发版服务!
2019-07-08 15:37:27 即将卸载  的进程:26929
2019-07-08 15:37:28 等待卸载  的进程:26929 ...
2019-07-08 15:37:29 等待卸载  的进程:26929 ...
2019-07-08 15:37:30 等待卸载  的进程:26929 ...
2019-07-08 15:37:31 等待卸载  的进程:26929 ...
2019-07-08 15:37:32 成功卸载  的进程。
2019-07-08 15:37:32 未能启动  
SSH: EXEC: completed after 5,404 ms

登录到服务上,执行脚本,又能成功启动。启动服务的命令如下:

# 移动新包,并启动服务
mv $NEWDIR/$JAR_FINAL .
nohup java -jar $JAR_FINAL > /dev/null 2>&1 &

PID=`lookupPid`
if [ -n "$PID" ]; then
  echo "`date '+%F %T'` 正在启动 <$JAR_FINAL> 新进程:$PID ..."
else
  echo "`date '+%F %T'` 未能启动 <$JAR_FINAL> "
  exit 1
fi

尝试了N多次,找到问题的根源所在:Jenkins远程执行脚本时,所有的路径必须是绝对路径,相对路径是不行的,且需要同步远程服务器的环境变量。所以,将启动命令改成如下即可:

# 移动新包,并启动服务
source /etc/profile
mv $NEWDIR/$JAR_FINAL .
nohup `which java` -jar $JAR_FINAL > /dev/null 2>&1 &

 

你可能感兴趣的:(Linux/Unix)