目的,通过控制台输出java的jar启动日志,查看服务是否成功启动。并通过脚本来调节,避免日志一直打印不退出,导致jenkins job hang住。
于是在jenkins启动的时候加了构建后shell 脚本 启动顺序如下
1 启动第一个杀死tail命令的脚本kill_tailf.sh,匹配到日志出现Started App in 或者JVM running 成功退出 或者日志打印时间超过46秒失败退出
2 启动tail 的脚本tailf。sh
脚本如下 我这里因为部署环境不一样所以 传入了参数。自己用的话可以写死。就不需要传入参数了
这个execute.log是项目的日志名称
boole_log和boole_jvm_log是会生成的
kill_tailf.sh
#!/bin/sh
# @Time : 2019-10-24
# @Author : jiaminxu
# @Name :kill_tailf.sh
# @Description : 用于检测 日志里是否包含Started .* second 判断项目是否成功启动 配合tailf.sh一起使用
#项目日志文件 execute.log
des_log=$1/execute.log
echo "项目日志为:$des_log"
second=0
echo "" > $1/bin/boole_log
echo "" > $1/bin/boole_jvm_log
while true
do
sum=`cat ${des_log} |grep 'Started App in' |wc -l`
sum_jvm=`cat ${des_log} |grep 'JVM running for' |wc -l`
echo "[tags] sum: ${sum} second: $second sum_jvm: $sum_jvm"
echo "${sum}" >$1/bin/boole_log
echo "${sum_jvm}" >$1/bin/boole_jvm_log
if [ ${second} -ge 46 ];then
echo 部署等待时间过长 退出部署
ps -ef |grep "tailf ${des_log}" |grep -v grep|awk '{print $2}' |xargs kill
break
fi
if [ ${sum} -gt 0 ] || [ ${sum_jvm} -gt 0 ];then
echo "[tags] sum ${sum} "
ps -ef |grep "tailf ${des_log}" |grep -v grep|awk '{print $2}' |xargs kill
echo [tags] 项目启动花费 $second 秒
break
fi
second=$((second + 2))
sleep 2
echo [tags] 启动时长second $second
done
tailf.sh
#!/bin/sh
# @Time : 2019-10-24
# @Author : jiaminxu
# @Name :tailf.sh
# @Description : 判断此次部署是否成功 并打印java日志
# $1为job文件夹部署的位置
# 后台执行杀死
sh $1/bin/kill_tailf.sh $1 &
# 执行tailf 查看日志
echo "执行shell命令: tailf $1/execute.log"
tailf $1/execute.log
echo [tags] tailf 命令已经成功退出
# 判断是否捕获到 Started .* second
sum=`cat $1/bin/boole_log`
sum_jvm=`cat $1/bin/boole_jvm_log`
if [ $sum -gt 0 ];then
echo [tags] ------------
echo [tags] 本次部署成功
echo [tags] ------------
elif [ $sum_jvm -gt 0 ];then
echo [tags] ------------
echo [tags] 本次部署成功
echo [tags] ------------
else
echo [tags] ------------
echo [tags] 本次部署失败
echo [tags] ------------
fi
效果如下 对以上的脚本稍作改动.判断了是否是生产的网关
