Java项目多版本部署及快速回滚(含完整命令)

1. 场景描述

java项目linux环境下快速部署,以前介绍过,今天主要结合linux的软连接,实现版本的快速切换(回滚),包含完整的start.sh与stop.sh,只需修改包名和路径即可运行,有类似需求的朋友可以参考下。

2.解决方案

该方案主要介绍快速部署与版本的快速切换(回滚)。

2.1 创建文件夹

[ruanjianlaowang@t-laowang ~]# mkdir app
[ruanjianlaowang@t-laowang ~]# cd app
[ruanjianlaowang@t-laowang ~]# mkdir ruanjianlaowang
[ruanjianlaowang@t-laowang ~]# cd ruanjianlaowang
[ruanjianlaowang@t-laowang ~]# mkdir bin
[ruanjianlaowang@t-laowang ~]# mkdir conf
[ruanjianlaowang@t-laowang ~]# mkdir log

说明:

(1)在 /app 目录下创建 jar包名称 相同的文件夹,其中包含 文件夹;

(2)bin目录,存放jar包,启动脚本;

(3)conf目录,存放配置文件;

(4)log目录,存放日志文件;

2.2 配置说明

(1)bin目录,jar包使用软连接保存历史版本,便于快速回滚

命令:

--新建软连接
ln -s ruanjianlaowang201912031.jar ruanjianlaowang.jar 

--更新软件连接
mv ruanjianlaowang-1.0-SNAPSHOT.jar ruanjianlaowang201912031.jar
ln -snf ruanjianlaowang201912031.jar ruanjianlaowang.jar 

---删除软连接
rm  -rf ruanjianlaowang.jar

通过软连接的方式,当版本出现问题的时候,就可以直接通过ln -snf来快速回滚到对应的历史版本

(2)conf文件 配置文件使用软连接保存历史版本,便于快速回滚,(1)类似。

(3)log文件夹就不多说了,就是存在log的地方

2.3 sh文件

只需替换路径和包名称即可运行,配置分离的话,可将配置文件放置到conf文件夹下,假如打包已经分离了,也可不放,主要是包的快速回滚与发布。

(1)start.sh

#!/bin/bash

INPUT_1="ruanjianlaowang"
APP_BASE=/home/laowang/app/$INPUT_1/
APP=${APP_BASE}bin/${INPUT_1}.jar
LOG_DIR=${APP_BASE}log/
cd $APP_BASE
if ! [ -e $LOG_DIR ]; then
   mkdir $LOG_DIR
fi
if ! [ -e $APP ]; then
   echo "failed, $INPUT_1 not exit"
   exit 
fi
PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
if [ -n "$PROC_ID" ]; then
   echo "$INPUT_1 pid ${PROC_ID} still running now , please shutdown it first!"
   exit 2
fi
PROP_CONFIG="${APP_BASE}conf/application"
if [ -e ${PROP_CONFIG}.properties ]; then
   PROP_CONFIG=file:${PROP_CONFIG}.properties
   nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP --spring.config.location=${PROP_CONFIG} 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out & 
elif [ -e ${PROP_CONFIG}.yml ]; then
   PROP_CONFIG=file:${PROP_CONFIG}.yml 
   nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP --spring.config.location=${PROP_CONFIG} 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &
else
   PROP_CONFIG=
   nohup ${JAVA_HOME}/bin/java -jar -Xms1024m -Xmx2048m $APP 1>> ${LOG_DIR}catalina.out 2>> ${LOG_DIR}catalina-error.out &  
fi
cd -
if ! [ -n ${PROP_CONFIG} ]; then
   echo "warn!!!!, use propertis file : ${PROP_CONFIG}"
fi
if [ "$?" = "0" ]; then
    echo "$0 ${1%/} start succeed" 
else
    echo "$0 ${1%/} start failed"
fi
tail -f ${LOG_DIR}catalina.out

(2)stop.sh

#!/bin/bash
INPUT_1="ruanjianlaowang"
APP_BASE=/home/laowang/app/$INPUT_1/
APP=${APP_BASE}bin/${INPUT_1}.jar
LOG_OUT=${APP_BASE}log/catalina
echo $APP
if ! [ -e $APP ]
then
   echo "failed, $INPUT_1 not exit"
   exit 1
fi

PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`

if [ -n "$PROC_ID" ]
then
  kill $PROC_ID
else
  echo "$INPUT_1 instance not found !"
  exit
fi

for i in {1..10}; do
   PROC_ID=`ps axu | grep "java"|grep ${APP} |grep -v "grep"|awk '{print $2}'`
   if [ -n "$PROC_ID" ]; then
       if [ "$i" = "1" ]; then
          echo -n "trying stop (${PROC_ID}): $i"
       else
          echo -n -e "\b$i"
       fi
      
       sleep 1
   else
      echo -e "\n $APP was killed($i)"
      exit;
   fi
done;
kill -9 "$PROC_ID"
echo "$APP was force killed"

(3)restart.sh

#!/bin/bash
./stop.sh
./start.sh

I’m 「软件老王」,如果觉得还可以的话,关注下呗,后续更新秒知!欢迎讨论区、同名公众号留言交流!

posted @ 2019-12-05 10:30  软件老王  阅读(...)  评论(...编辑  收藏