zoukankan      html  css  js  c++  java
  • 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 是启动应用脚本,自行定义 。

  • 相关阅读:
    如何 Xcode 开发工具里安装一个空的项目末模板
    推荐完成项目要使用的常用工具
    仿照 QQ 的 cell 的左滑删除、置顶、标记未读效果
    API接口文档的撰写
    UI:动画
    UI:多线程 、用GCD创建线程
    UI:UICollectionView
    开发中的一些零碎知识点
    UI:数据库练习、滤镜效果
    UI:地图和定位
  • 原文地址:https://www.cnblogs.com/mrice/p/15538735.html
Copyright © 2011-2022 走看看