传统项目的一键部署shell脚本

#!/bin/sh

#全局变量
pid=`ps -ef | grep blcu_fxl | grep -v grep | awk -F " " '{print $2}'`
mode=$1
shijian=`date +'%Y-%m-%d %H:%M:%S'`
# 项目部署目录
projectDir=/fxl/java_file

#定义进度条
function progress_line(){
i=0;
istr=""
arr=("|" "/" "-" "\\")
while [ $i -le 100 ]
do
  let index=i%4
  let indexcolor=i%8
  let color=30+indexcolor
  printf "\e[0;$color;1m[%-100s][%d%%]%c\r" "$str" "$i" "${arr[$index]}"
  sleep 0.1
  let i++
  str+='='
done
printf "\n"
}

function package (){
#源码目录
souce_code=/tmp/fxl
echo "=============$shijian=============="
echo "第一步,拉取代码,打包操作"
echo "进入源码目录$souce_code"
cd $souce_code
echo "拉取更新代码"
/usr/bin/git pull
if [ $? == 0 ];then
    echo "拉取完成,进行打包操作"
    /opt/apache-maven-3.6.3/bin/mvn package -Dmaven.test.skip=true
    if [ $? == 0 ];then
        echo "打包完成!"
    else
        echo "打包失败!"
        exit 1
    fi
else
    echo "糟糕,代码拉取失败!"
fi
}

function stop_backup (){
echo "=============$shijian=============="
echo "第二步,停止+备份操作"
echo "停止,pid=$pid"
kill $pid
sleep 3
echo "备份"
yes | /usr/bin/mv /fxl/java_file/blcu_fxl-0.0.1-SNAPSHOT.jar /fxl/java_file/backup/blcu_fxl-0.0.1-SNAPSHOT.jar
echo "操作完成"
}

function deploy (){
echo "=============$shijian=============="
echo "第三步,部署操作"
/usr/bin/mv /tmp/fxl/target/blcu_fxl-0.0.1-SNAPSHOT.jar /fxl/java_file 
echo "启动进程,请等待二十秒"
nohup /opt/jdk1.8/bin/java -jar /fxl/java_file/blcu_fxl-0.0.1-SNAPSHOT.jar >> /dev/null 2>&1 &
sleep 20
echo "执行完毕,进程id为$pid"
}


function rollback(){
echo "=============$shijian=============="
echo "回滚操作"
echo "停止"
stop
echo "替换"
yes | /usr/bin/mv /blcu_developer_v2/backup/blcu_fxl-0.0.1-SNAPSHOT.jar /blcu_developer_v2
echo "开始,请等待二十秒"
nohup /opt/jdk1.8/bin/java -jar /blcu_developer_v2/blcu_fxl-0.0.1-SNAPSHOT.jar >> /dev/null 2>&1 &
sleep 20
echo "回滚完毕"
}

function stop(){
count=`ps -ef | grep blcu_fxl | grep -v grep  | wc -l`
echo "=============$shijian=============="
if [ $count -gt 0 ];then
    echo "进程id为$pid,kill它"
    kill $pid
    sleep 3
else
    echo "进程不存在,无需停止操作"
fi
}

function start(){
count=`ps -ef | grep blcu_fxl | grep -v grep  | wc -l`
echo "=============$shijian=============="
if [ $count == 0 ];then
    nohup /opt/jdk1.8/bin/java -jar /fxl/java_file/blcu_fxl-0.0.1-SNAPSHOT.jar >> /dev/null 2>&1 &
    echo "请等待二十秒"
    sleep 20
    echo "开启完毕"
else
    echo "进程已存在,无需开启操作"
fi
}

function start_debug(){
count=`ps -ef | grep blcu_fxl | grep -v grep  | wc -l`
echo "=============$shijian=============="
if [ $count == 0 ];then
    nohup /opt/jdk1.8/bin/java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8989 /fxl/java_file/blcu_fxl-0.0.1-SNAPSHOT.jar >> /dev/null 2>&1 &
    echo "请等待二十秒"
    sleep 20
    echo "debug模式启动完毕"
else
    echo "进程已存在,无需开启操作"
fi
}

function status(){
count=`ps -ef | grep blcu_fxl | grep -v grep  | wc -l`
echo "=============$shijian=============="
if [[ $count -eq 0 ]];then
   echo -e "\033[31m停止状态\033[0m"
else
   echo -e "\033[32m运行状态\033[0m"
fi
}

function help (){
echo -e "\033[32m支持七个操作,需要在调用脚本时指定操作参数,不支持传递其他参数,支持的参数有start,stop,deploy,rollback,restart,status,help\033[0m"
echo -e "\033[32mstart:开启进程,自动判断进程是否存在,如存在则进行提示,如不存在则进行开启操作,等待进度条跑完即可\033[0m"
echo -e "\033[32mdebug:以debug模式开启进程,自动判断进程是否存在,如存在则启动,端口8989,等待进度条跑完即可\033[0m"
echo -e "\033[32mstop:停止进程,调用python脚本实现,自动判断进程是否存在,如不存在则进行提示,如存在则进行停止操作,根据提示判断是否成功\033[0m"
echo -e "\033[32mdeploy:部署操作,自动拉取一期源码后进行打包、备份、停止、启动操作,最后等待进度条跑完即可\033[0m"
echo -e "\033[32mrollback:回滚操作,停止进程并回滚至上一个版本后启动进程,等待进度条跑完即可\033[0m"
echo -e "\033[32mrestart:重启操作,先停止进程后再启动进程,如进程不存在则不进行任何操作并进行提示\033[0m"
echo -e "\033[32mstatus:查看进程状态\033[0m"
echo -e "\033[32mhelp:显示帮助信息\033[0m"
}
cd ${projectDir}
case "$mode" in
  'start')
   start
    ;;

  'debug')
   start_debug
    ;;

  'stop')
   stop
    ;;

  'restart')
   stop
   start
    ;;

  'rollback')
   rollback
    ;;

  'deploy')
   package
   stop_backup
   cd ${projectDir}
   deploy     
    ;;

  'status')
   status
    ;;

  'help')
   help
   ;;
    *)
    basename=`basename "$0"`
    echo "Usage: $basename {start|debug|stop|deploy|rollback|restart|status|help}"
    exit 1
    ;;
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值