Jenkins的搭建及应用(四)

Jenkins控制台输出启动日志

Jenkins的搭建需要多很多问题,其中两个问题相对突出,一是Jenkins任务一直停滞不结束问题,这个我是通过输出日志重定向方法处理的。二是Jenkins控制台无法输出Jar启动的日志,本章详细说明这个问题。

问题概述

文章二中的Maven打包日志,Jenkins能正常的输出到自己控制台中,但是文章三中的Jar包启动日志,缺没办法输出控制台,其原因是打包的操作是在22机器上完成的日志输出到22的nohup.out中,而Jar启动的操作实在18机器上,日志输出在18机器的nohup.out中。

解决思路

1.22机器上远程指令tail -f 18机器上的nohup.out
2.存在问题tail -f 的进程不会自己结束,Jenkins任务会卡着不停
3.使用和文章三种相同的思路,查询tail -f的进程号,再杀掉

解决方案

18机器上,在对应的项目路径下建两个脚本,一是日志打印脚本,其核心是tail -f 日志,然后检测是否有成功标志。二是杀日志进程脚本,其核心是检测日志中是否出现成功部署的标示,有就向指定文件中输入特殊值,然后杀掉tail -f的进程,或者超时杀进程。

打印日志脚本

先去执行kill_tailf.sh脚本,然后执行tailf 命令,检测日标文件中是否存在特殊标示,打印本次部署的结果。

# $1为job文件夹部署的位置

# 后台执行杀死

sh $1/kill_tailf.sh $2 &
 

# 执行tailf 查看日志

echo "执行shell命令: tailf $2/nohup.out"

tailf $2/nohup.out

 

echo [tags] tailf 命令已经成功退出

# 判断是否捕获到 Started .* second

sum=`cat $2/boole_log`

sum_jvm=`cat $2/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

日志Kill脚本

清除两个特殊文件中的值,检测日志文件中是否存在成功标示,有就向指定文件中输出特殊标志,然后找到tailf的进程后杀掉,或者超时后杀掉。

#项目日志文件 nohup.out

des_log=$1/nohup.out

echo "项目日志为:$des_log"

 

second=0

 

echo "" > $1/boole_log

echo "" > $1/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/boole_log

    echo "${sum_jvm}" >$1/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

Jenkins中的调用

执行18机器上的tailf.sh脚本,具体可以看文章三中最后一部分。

ssh root@192.168.***.18 "sh ${TARGET_FATHER_PATH}${TAIL_SH_NAME} ${TARGET_FATHER_PATH} ${TARGET_FILE_PATH}"

本章内容参考了文章 链接.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值