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 是启动应用脚本,自行定义 。