当前位置:   article > 正文

jenkins后处理shell脚本实现java jar启动并打印日志+自动回退+备份_jenkins部署java项目 打印日志

jenkins部署java项目 打印日志

上网找了好多,都不太好用,就结合了一下,自己写了一下。
过程就是启动之前检查原来项目是否正常启动
正常启动则备份,没正常启动则不备份 直接 rm-r
然后复制项目到启动目录
然后nohup启动
在日志文件内 监测行数 一个记现在打印到第几行了 一个记日志有多少行了 若不相等,则相减 输出日志那几行
当遇到Started App in 即成功

若启动时间过长或者日志里很明确有错误了,则退出部署,若failedNeedRollBack参数是true
则回退版本,回退版本就是挑选最近的部署项目,解压,启动,监测日志
若回退失败,则不再进行任何操作。值得注意的是 无论成功与否,最终jenkins我都要求他failed
因为本身启动就是失败了。

以前没怎么写过shell脚本,也是不断搜不断写的 很冗杂,有问题请留言。一起学习,谢谢

#!/bin/bash/
# $1 因为这个脚本是好几个服务脚本 所以有个type  $2 port  $3 failedNeedRollBack(失败是否回退) 这些参数都是jenkins的 参数化构建过程 里面添加的参数 
dateToday=$(date +%F)  #我的log路径需要
backupDate=$(date "+%Y%m%d%H%M%S")  #备份需要
backupName=$1"ProjectName"$backupDate".tar" #备份名称
des_log=~/jenkinsDeploy/$1/logs/xxx/$dateToday/info.0.log  #log路径
fileSize=`du -s ~/jenkinsDeploy/$1/`  #项目所在路径的大小

# 备份过程  只有检测到日志里面有Started application in才备份
if [[ ${fileSize%%/*} -ne 0 ]]; then
    if [[ `cat $des_log |grep 'Started application in' |wc -l` -gt 0 ]]; then
        echo [INFO] ">>>>>>>>>> 开始备份 <<<<<<<<<<"
        tar -cvf ~/jenkinsDeploy/backUp/$1/$backupName -C/data/xxx/jenkinsDeploy/$1/ . --exclude=logs >/dev/null   #排除log 打包项目路径下的内容 并且放入backup路径下
        echo [INFO] ">>>>>>>>>> 结束备份 <<<<<<<<<<"
    fi
    rm -r ~/jenkinsDeploy/$1/*  #删除部署路径下的内容
fi

# 将jenkins workspace内的内容放入启动所需目录下
cd ~/.jenkins/workspace/$1"ProjectName"/target
cp *.jar ~/jenkinsDeploy/$1
cp -r resources ~/jenkinsDeploy/$1
cp -r lib ~/jenkinsDeploy/$1
cd ~/jenkinsDeploy/$1
jarOldName=`ls -a|grep ProjectName-`
jarNewName="jenkins-"$1"-"$jarOldName
mv $jarOldName $jarNewName

# nohop启动  
# 最好不要用端口kill jarNewName名字拼接一下 
ps -ux|grep $jarNewName|grep "port="$2|grep -v grep|awk '{print $2}'|xargs kill -9
BUILD_ID=dontKillMe
echo [INFO] ">>>>>>>>>> 开始启动项目 <<<<<<<<<<"
nohup java -jar -XX:MetaspaceSize=512M -Xmx10g -Dserver.port=$2 -Dspring.profiles.active=test $jarNewName &

sleep 2
second=0
lastShellRow=0
echo [INFO] ">>>>>>>>>>> 日志所在位置"$des_log" 开始输出日志<<<<<<<<<<"

# 日志监测部分
while true
do
    nowShellRow=`cat $des_log |wc -l`
    showRow=$[nowShellRow-lastShellRow]
    if [[ $showRow -ge 0 ]]; then
        tail -n$showRow $des_log
    fi
    sum=`cat $des_log |grep 'Started application in' |wc -l`
    sum_jvm=`cat $des_log |grep 'JVM running for' |wc -l`
    failed_sign=`cat $des_log |grep 'Application run failed\|Failed to' |wc -l`
    if [ $second -ge 800 ];then
       echo [ERROR] ">>>>>>>>>> 部署等待时间过长 退出部署 <<<<<<<<<<<"
       ps -ux|grep $jarNewName|grep "port="$2|grep -v grep|awk '{print $2}'|xargs kill -9
       if [[ $3 = "true" ]];then
            echo [INFO] ">>>>>>>>>> 准备回退版本 <<<<<<<<<<"
            bash ~/jenkinsDeploy/runShell/rollback.sh $1 $2
       fi
       exit 1
       break
    fi
    if [ $sum -gt 0 ] || [ $sum_jvm -gt 0  ];then
        echo [INFO] ">>>>>>>>>> 项目启动花费 $second 秒 <<<<<<<<<<"
	   break
    fi
    if [[ $failed_sign -gt 0 ]];then
        echo [INFO] ">>>>>>>>>> 项目启动花费 $second 秒 <<<<<<<<<<"
        echo [ERROR] ">>>>>>>>>>> 项目启动失败 <<<<<<<<<<<"
        if [[ $3 = "true" ]];then
            echo [INFO] ">>>>>>>>>> 准备回退版本 <<<<<<<<<<"
            bash ~/jenkinsDeploy/runShell/rollback.sh $1 $2
        fi
        exit 1
        break
    fi
    second=$((second + 2))
    lastShellRow=$nowShellRow
    sleep 2
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

回退shell脚本

#!/bin/bash/
dateToday=$(date +%F)
rootPath=/xxx/xxx    #只是为了拼备份地址 以及 部署地址    
backupPath=$rootPath/jenkinsDeploy/backUp/$1
deployPath=$rootPath/jenkinsDeploy/$1
logPath=$deployPath/logs/xxx/$dateToday/info.0.log   #日志地址

# 获取最近的那条备份
tarName=`ls -t $backupPath| head -n1`   #获取时间最近的那条备份的名称
echo [INFO] ">>>>>>>>> 获取"$backupPath$tarName"进行版本回退操作 <<<<<<<<<<"

cd $deployPath
jarName=`ls -a|grep ProjectName-`


# $1 logPath $2 port $3 jarName
monitorStartUpLogsFile(){
        lastShellRow=0
        while true
        do
          nowShellRow=`cat $1 |wc -l`
          showRow=$[nowShellRow-lastShellRow]
          if [[ $showRow -ge 0 ]]; then
                  tail -n$showRow $1
          fi
          sum=`cat $1 |grep 'Started App in' |wc -l`
          sum_jvm=`cat $1 |grep 'JVM running for' |wc -l`
          failed_sign=`cat $1 |grep 'Application run failed\|Failed to' |wc -l`
          if [ $second -ge 800 ];then
             echo [ERROR] ">>>>>>>>>> 回退版本项目部署等待时间过长 退出部署 <<<<<<<<<<"
             ps -ux|grep $3|grep "port="$2|grep -v grep|awk '{print $2}'|xargs kill -9
             exit 1
             break
          fi
          if [ $sum -gt 0 ] || [ $sum_jvm -gt 0  ];then
              echo [INFO] ">>>>>>>>>> 项目回退版本启动花费 $second 秒 <<<<<<<<<<"
              echo [INFO] ">>>>>>>>>> 项目回退版本启动成功 <<<<<<<<<<"
              break
          fi
          if [[ $failed_sign -gt 0 ]];then
              echo [INFO] ">>>>>>>>>> 项目回退版本启动花费 $second 秒 <<<<<<<<<<"
              echo [ERROR] ">>>>>>>>>> 项目回退版本启动失败 <<<<<<<<<<"
              echo [INFO] ">>>>>>>>>> 请手动操作回退版本!<<<<<<<<<<"
              exit 1
              break
          fi
          second=$((second + 2))
          lastShellRow=$nowShellRow
        sleep 2
        done
}

if [[ -n "$tarName"  ]]; then
        # 非空 恢复备份
        rm -r $deployPath/*
 	      echo [INFO] ">>>>>>>>>> 开始解压备份版本 <<<<<<<<<<"
        tar -xvf $backupPath/$tarName -C $deployPath/ > /dev/null
        echo [INFO] ">>>>>>>>>> 备份版本解压完成 <<<<<<<<<<"
        cd $deployPath

		ps -ux|grep $jarName|grep "port="$2|grep -v grep|awk '{print $2}'|xargs kill -9
        BUILD_ID=dontKillMe
        echo [INFO] ">>>>>>>>>> 开始启动回退的版本"[$tarName]" <<<<<<<<<<"
        nohup java -jar -XX:MetaspaceSize=128M -Xmx10g -Dserver.port=$2 -Dspring.profiles.active=test $jarName &
        monitorStartUpLogsFile $logPath $port $jarName
fi

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

亲测好用!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/216851?site
推荐阅读
相关标签
  

闽ICP备14008679号