• shell脚本完成最后一步应用自动部署升级


           有很多DEVOPS的解释方案,每个公司或者每个项目环境都不一样,很多无法照搬。就目前项目来说,研发与部署上线是分离的,升级包需要通过运维人员手动上传项目环境进行部署升级。 应用模块化、分布式部署,但未采用容器。未采用ansible工具,基于现状为减少运维人员部署升级,通过shell脚本+共享存储定时完成部署升级。

    #!/bin/bash
    #
    # monitor jar
    #
    BASEPATH="/base"
    #判断目录是否存在,不存在的话退出。
    if [ ! -d ${BASEPATH} ];then echo "----${BASEPATH} No such file or directory----" exit 1 fi
    #应用列表 SERVERLIST
    =' lneoms-gateway ' SER_VER="/app/upgrade_app/ser_version" IP1="10.204.1.51" IP2="10.204.1.52" #判断目录是否存在,不存在的话退出。同时还判断分布部署服务器判断升级状态变更是否存在。 if [ ! -f ${SER_VER} ];then echo "----${SER_VER} No such file or directory----" exit 1 else grep ${IP1}= $SER_VER RES1=$? grep ${IP2}= $SER_VER RES2=$? if [ ${RES1} -ne 0 ] && [ ${RES2} -ne 0 ];then echo "---$IP1 or $IP2 No file----" exit 1 fi fi APPPATH='/app/upgrade_app'
    #判断目录是否存在,不存在的话退出。待升级应用存放目录
    if [ ! -d ${APPPATH} ];then
            echo "----${BASEPATH} No such file or directory----"
            exit 1
    fi
    
    APP_BACK='/app/bak_pro/application'

    #判断目录是否存在,不存在的话退出。应用备份目录 if [ ! -d ${APP_BACK} ];then echo "----${APP_BACK} No such file or directory----" exit 1 fi #循环应用,通过判断包的大小升级。 for APPNAME in ${SERVERLIST} do cat <<EOF -------------- Begin $APPNAME -------------- EOF if [ -d ${BASEPATH}/${APPNAME} ] && [ -f ${APPPATH}/${APPNAME}.jar ] ;then cd $APPPATH FILESIZE=$(ls -l ${APPNAME}.jar |awk '{print $5}') cd $BASEPATH/$APPNAME test -f $APPNAME.jar && OLDFILESIZE=$(ls -l ${APPNAME}.jar |awk '{print $5}') || OLDFILESIZE=0 if [ $FILESIZE -ne $OLDFILESIZE ] ;then mv ${APPNAME}.jar ${APP_BACK}/${APPNAME}.jar_$(date +%Y%m%d%H%M) || echo "----${APPNAME}.jar No such file----" cp -a ${APPPATH}/${APPNAME}.jar . && /usr/bin/sh app.sh restart else echo "----$APPNAME.jar No change----" fi else echo "----$APPNAME No such file or directory----" fi cat <<EOF End $APPNAME -------------- EOF done
    #upgrade
    stat
    #已两台负载为例,另一台将下面IP1修改为IP2,升级完后修改更新状态
    sed -i s/${IP1}=0/${IP1}=1/g ${SER_VER} #app upgrade clear
    #如果两个服务器都升级完毕后,删除待升级应用目录的JAR文件
    SER1=$(grep ${IP1} ${SER_VER} |cut -d"=" -f2) SER2=$(grep ${IP2} ${SER_VER} |cut -d"=" -f2) if [ ${SER1} -eq "1" ] && [ ${SER2} -eq "1" ];then echo "After the upgrade,Clear app!" for APPNAME in ${SERVERLIST} do rm -f ${APPPATH}/${APPNAME}.jar done sed -i s/${IP1}=1/${IP1}=0/g ${SER_VER} sed -i s/${IP2}=1/${IP2}=0/g ${SER_VER} else echo "cluster other node no upgrade!" fi

    记录应用状态文件/app/upgrade_app/ser_version

      

    10.204.1.51=0
    10.204.1.52=0

         注:脚本中/usr/bin/sh app.sh restart 是启动应用脚本,自行定义 。

  • 相关阅读:
    js apply 和call的区别
    TensorFlow 便捷的实现机器学习 三
    logistic regression model
    特征工程
    生成模式以及判别模式
    PCA降维技术
    TensorFlow 入门之手写识别CNN 三
    机器学习学习笔记1
    TensorFlow 入门之手写识别(MNIST) softmax算法 二
    TensorFlow 入门之手写识别(MNIST) 数据处理 一
  • 原文地址:https://www.cnblogs.com/mrice/p/15538735.html
Copyright © 2020-2023  润新知