赞
踩
目的,通过控制台输出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 |
效果如下 对以上的脚本稍作改动.判断了是否是生产的网关
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。