1. 用脚本启动程序的方式,jekins调用脚本失败
原因之一:一般情况下是命令中直接写的‘java’命令,而jekins找不到java命令
解决:把java命令写为绝对路径下的java命令,同时推荐所有涉及到命令的地方都写绝对路径
2. jekins执行脚本部署程序后,界面一直转圈不退出
原因:启动命令是‘nohup java -jar .. &’的方式,这个‘nohup’就导致了这样不能推出,因为我们平常直接在linux中执行的时候,如果脚本有这个nohup,都需要额外的再敲一次回车才会退出等待窗口。
解决:
方案一:
写两个命令,命令2是启动命令(start.sh),命令1是调用命令2的命令,并且在命令1中写上自动回车的等效语句,如下:
str=$"\n"
nohup sh start.sh > nohup.out &
sstr=$(echo -e $str)
echo $sstr
这时候命令2可以是没有nohup的。
方案二:
直接在启动命令下插入创建文件的命令即可退出。为了收尾,我们就索性再加一句删除这个文件的命令。。。。
方法三:
类似方法一,不过是写三个命令文件:一个stop.sh,一个sart.sh,一个restart.sh,其中restart.sh调用另外两个,并且在两者之间加了一句重命名文件夹的命令如下:
restart.sh
#!/bin/bash
sh stop.sh
mv jfqqq.jar running.jar
sh start.sh
stop.sh (找到running.jar的启动命令的线程id,关闭线程)
#!/bin/sh
pids=`ps -ef | grep running.jar| grep -v grep | awk '{print $2}'`
echo find pids: ${pids}
for pid in ${pids[@]}; do
echo kill pid: ${pid}
kill -9 ${pid}
done;
>nohup.out
mv running.jar jfqqq.jar.bak
start.sh(启动running.jar,并且nohup守护,&支持退出,>/../../nohup.out执行日志输出位置)
#!/bin/bash
nohup /usr/local/jdk-11.0.2/bin/java -jar /root/project/jfqqq/running.jar > /root/project/jfqqq/nohup.out &
~
~
~
jekins(只需要在post step设置即可,pre用不到):
3. 想要实现jekins启动程序时,可以实时输出程序启动日志,然后在启动成功后,再退出
思路:
梳理要解决的问题:
1. jekins程序如何知道程序启动成功
2. jekins如何退出
3. 如何让jekins打印执行日志(其实就等价于打印出它操作的命令的日志以及结果)
解决:
问题1. 这个通过寻找程序启动成功的点即可,比如,启动springboot工程,默认tomcat,成功的话会有输出‘Tomcat started on port’字样,因此只要让jekins执行一个查看日志的命令并在看到关键字后退出的命令即可。如下(使用tail -f 不停刷新查看,然后利用sed匹配关键字后退出):
问题2. 这个看上面的问题中,有解决方案
问题3. 这个只需要勾选jekins的一个高级设置即可(需要点击‘高级’按钮来展开界面):