deployment-rollback.txt 2.5 KB
#!/bin/bash

. ~/.bash_profile

#出现异常则退出
set -e

#获取输入的GIT_BRANCH
GIT_BRANCH="$1"

#验证GIT_BRANCH
if [ ! ${GIT_BRANCH} ]; then
  echo "fail: please input git branch name"
  exit 2
fi

#获取输入的commit id
ROLLBACK_COMMIT_ID="$2"

#验证commitID
if [ ! ${ROLLBACK_COMMIT_ID} ]; then
  echo "fail: please input commit id"
  exit 2
fi

#定义常量
GIT_URL=git@gitlab.taover.com:taov-erp/8zyun-data-analysis.git
GIT_PROJECT_NAME=8zyun-data-analysis
MAIN_DIR=$(cd `dirname $0`; pwd)
WEBAPP_DIR_NAME=webapp
WEBAPP_BAK_DIR_NAME=webapp-bak
LOG_DIR_NAME=log

cd ${MAIN_DIR}

#克隆项目
if [ ! -d "${MAIN_DIR}/${GIT_PROJECT_NAME}" ]; then
  cd ${MAIN_DIR}
  git clone ${GIT_URL}
  echo "git clone success"
fi

#创建基础目录
if [ ! -d "${MAIN_DIR}/${WEBAPP_DIR_NAME}" ]; then
  mkdir ${MAIN_DIR}/${WEBAPP_DIR_NAME}
  echo "mkdir webapp success"
fi
if [ ! -d "${MAIN_DIR}/${WEBAPP_BAK_DIR_NAME}" ]; then
  mkdir ${MAIN_DIR}/${WEBAPP_BAK_DIR_NAME}
  echo "mkdir webapp bak success"
fi
if [ ! -d "${MAIN_DIR}/${LOG_DIR_NAME}" ]; then
  mkdir ${MAIN_DIR}/${LOG_DIR_NAME}
  echo "mkdir log success"
fi

#备份上一JAR
#cp -rf ${MAIN_DIR}/${WEBAPP_DIR_NAME}/ ${MAIN_DIR}/${WEBAPP_BAK_DIR_NAME}/
#echo "bak webapp dir success"

#备份日志文件
bakLogFilePreffix=`date '+%Y%m%d_%H%M'`
if [ -f ${MAIN_DIR}/${LOG_DIR_NAME}/log_std.out ]; then
  cp -f ${MAIN_DIR}/${LOG_DIR_NAME}/log_std.out ${MAIN_DIR}/${LOG_DIR_NAME}/${bakLogFilePreffix}_log_std.out
fi
if [ -f ${MAIN_DIR}/${LOG_DIR_NAME}/log_error.out ]; then
  cp -f ${MAIN_DIR}/${LOG_DIR_NAME}/log_error.out ${MAIN_DIR}/${LOG_DIR_NAME}/${bakLogFilePreffix}_log_error.out
fi

#拉取线上production代码并编译发布
cd ${MAIN_DIR}/${GIT_PROJECT_NAME}/
git checkout ${GIT_BRANCH}
git reset --hard ${ROLLBACK_COMMIT_ID}
gradle build
echo "pull ${GIT_BRANCH} ${ROLLBACK_COMMIT_ID} and build success"

#终止线程并移除文件
pid=`ps -ef | grep "$GIT_PROJECT_NAME".jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
  kill $pid
fi
rm -rf ${MAIN_DIR}/${WEBAPP_DIR_NAME}/*
echo "end process and rm success"

#移动TAR文件、解压、启动
cd ${MAIN_DIR}/${WEBAPP_DIR_NAME}/
mv ${MAIN_DIR}/${GIT_PROJECT_NAME}/build/distributions/${GIT_PROJECT_NAME}-boot.tar ${MAIN_DIR}/${WEBAPP_DIR_NAME}/
tar -xvf ${GIT_PROJECT_NAME}-boot.tar
nohup java -Xmx8192m -jar ${GIT_PROJECT_NAME}-boot/lib/${GIT_PROJECT_NAME}.jar --spring.profiles.active=production  2>${MAIN_DIR}/${LOG_DIR_NAME}/log_error.out 1>${MAIN_DIR}/${LOG_DIR_NAME}/log_std.out &
echo "start up success"