• Jenkins总结3-shell脚本


      我写shell脚本的功力还很初级,基本都是现学现卖,写得不是很健壮,只能提供个思路,请大家包涵。

      我使用的系统只能发函数放到shell最前面。本人还是比较推崇函数式脚本的,方便复用,目前只简单的封装了两个。

      1. 判断jar包是否运行,在项目停机前,启动后都可以用到。

    # 判断jar包是否正在运行
    is_exist(){
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
        if [ -n "$pid" ]; then
            return 0
        else
            return 1
        fi
    }

      2. 停止项目

    # 停止程序
    stop(){
        pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'`
        if [ -n "$pid" ]; then
            echo '停止pid='$pid
            kill $pid > /dev/null 2>&1
            count=`ps --no-heading -C java -f --width 2000 | grep $JAR_NAME | awk '{print $2}' | wc -l`
            if [ $count -gt 0 ]; then
                # 等5秒,尽量让程序优雅停机,之后再强制杀死进程
                sleep 5
                kill -9 $pid > /dev/null 2>&1
                sleep 1
            fi
        fi
    }

      3. 判断参数数量,并接受参数。我这个脚本有2个参数,第二个参数在后面直接用$2使用。

    # 接收参数, 项目名称
    if [[ $# == 2 ]]; then
        PROJECT_NAME=$1
        echo '接收到的项目名称参数='$PROJECT_NAME
    else
        echo '参数不全,无法执行!!!'
        exit 1
    fi

      4. 接下来可以提前名称项目目录,并拼接项目jar目录,日志目录等。

      5. 启动项目。$2是脚本的第二个参数,内存数量,单位M,$JAR_PATH是拼接好的jar包全路径。 并使用nohup后台运行。因为前台运行jar命令会造成jenkins会一直打印部署日志,shell脚本不能退出,最终jenkins部署超时。

    nohup /usr/local/java/bin/java -Xms$2m -Xmx$2m -jar $JAR_PATH > $OUT 2>&1 &

      6. 打印项目启动日志(方式1)

      这个方法简单粗暴,在前面执行完java命令之后,等待一段时间,我这里设置的是50秒,然后调用is_exist函数判断线程是否启动,之后打印判断结果和最后100行的启动日志。

      会打印一些多余的日志,如果项目打印日志太快可能是看不到启动日志的。

    # 等待50秒,再判断程序是否启动
    sleep 50
    is_exist
    # 打印启动日志
    if [ $? -eq 0 ]; then
        echo $JAR_NAME'发布成功!请查看日志'
        tail -100 $LOG_FILE
        exit 0
    else
        echo $JAR_NAME'发布失败!请查看日志'
        tail -100 $LOG_FILE
        exit 1
    fi

       7. 打印项目启动日志(方法2)

      获取当前系统的日期和小时,$LOG_FILE是我日志文件路径,循环grep判断日志中是否出现了启动成功的关键字“started successfully”,如果超过45秒还没有提示超时。

      待完善的地方:因为判断时间只精确到小时,如果一小时内项目重启多次,可能只会打印其中一次的日志,并不一定是最新的。如果精确时间到分钟,在项目启动时时间如果跨了分钟,有可能会判断不到。

      最后一行是输出启动日志“Initializing ProtocolHandler”是我项目启动的第一行日志,判断从这一行开始打印向下100行日志。

    today=`date +%Y-%m-%d`
    hour=`date +%H`
    
    seconds=0
    while [ -f $LOG_FILE ]
    do
        result=`grep "$today $hour" $LOG_FILE | grep "started successfully"`
        if [ -n "$result" ]; then
            echo "项目已启动........."
            break
        else
            echo "启动中.......已耗时$seconds秒"
            sleep 1s
            let seconds+=1;
        fi
        if [ ${seconds} -ge 45 ]; then
            echo "启动超时,45秒,自动退出";
            break;
        fi
    done
    echo $JAR_NAME"启动成功"
    # 打印启动日志
    grep "$today $hour" $LOG_FILE | grep -A 100 'Initializing ProtocolHandler'

    started successfully

  • 相关阅读:
    《The One!》团队作业4:基于原型的团队项目需求调研与分析
    《TheOne团队》团队作业三:团队项目原型设计与开发
    《The One 团队》第二次作业:团队项目选题
    《The One!团队》第一次作业:团队亮相
    实验十 团队作业6:团队项目系统设计改进与详细设计
    易校园——项目系统设计与数据库设计
    易校园--项目需求分析
    软工实践——团队上机作业
    团队编程第一次作业
    《发际线总是和我作队》第六次作业:团队项目系统设计改进与详细设计
  • 原文地址:https://www.cnblogs.com/huanshilang/p/13024105.html
Copyright © 2020-2023  润新知