• shell自动化一键部署脚本,秒级一键回滚脚本


      1 #!/bin/bash
      2 
      3 # Node List
      4 PRE_LIST="192.168.222.163"        # 预生产环境节点
      5 GROUP1_LIST="192.168.222.164"        # 分组 1
      6 ROLLBACK_LIST="192.168.222.163 192.168.222.164" # 回滚列表
      7 
      8 # Date/Time Veriables
      9 LOG_DATE='date "+%Y-%m-%d"'
     10 LOG_TIME='date "+%H-%M-%S"'
     11 
     12 CDATE=$(date "+%Y-%m-%d")
     13 CTIME=$(date "+%H-%M-%S")
     14 
     15 # Shell Env
     16 SHELL_NAME="deploy_all.sh"
     17 SHELL_DIR="/home/www/"
     18 SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
     19 
     20 # Code Env
     21 PRO_NAME="web-demo"
     22 CODE_DIR="/deploy/code/web-demo"
     23 CONFIG_DIR="/deploy/config/web-demo"
     24 TMP_DIR="/deploy/tmp"
     25 TAR_DIR="/deploy/tar"
     26 LOCK_FILE="/tmp/deploy.lock"
     27 
     28 usage(){
     29     echo $"Usage: $0 {deploy | rollback [ list | version ]}"
     30 }
     31 
     32 writelog(){
     33    LOGINFO=$1
     34    echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO} "  >> ${SHELL_LOG}
     35 }
     36 
     37 shell_lock(){
     38     touch ${LOCK_FILE}
     39 }
     40 
     41 shell_unlock(){
     42     rm -f ${LOCK_FILE}
     43 }
     44 
     45 url_test(){
     46     URL=$1
     47     curl -s --head $URL | grep '200 OK'
     48     if [ $? -ne 0 ];then
     49         shell_unlock;
     50         echo "test error" && exit;
     51     fi
     52 }
     53 
     54 code_get(){
     55     writelog "code_get";
     56     cd $CODE_DIR && git pull        # 事先要在部署机上 git clone 项目代码
     57     cp -r ${CODE_DIR} ${TMP_DIR}/
     58     API_VERL=$(git show | grep commit | cut -d ' ' -f2)
     59     API_VER=$(echo ${API_VERL:0:6})
     60 }
     61 
     62 code_build(){
     63     echo code_build
     64 }
     65 
     66 
     67 code_config(){
     68     writelog "code_config"
     69     /bin/cp -r ${CONFIG_DIR}/base/* ${TMP_DIR}/"${PRO_NAME}"
     70     PKG_NAME="${PRO_NAME}"_"$API_VER"_"${CDATE}-${CTIME}"
     71     cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME}
     72 }
     73 
     74 code_tar(){
     75     writelog "code_tar"
     76     cd ${TMP_DIR} && tar czf ${PKG_NAME}.tar.gz ${PKG_NAME}
     77     writelog "${PKG_NAME}.tar.gz"
     78 }
     79 
     80 
     81 code_scp(){
     82     writelog "code_scp"
     83     for node in $PRE_LIST;do
     84         scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
     85     done
     86 
     87     for node in $GROUP1_LIST;do
     88         scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
     89     done
     90               scp ${TMP_DIR}/${PKG_NAME}.tar.gz 192.168.222.162:/opt/webroot/
     91 }
     92 
     93 pre_deploy(){
     94     writelog "remove from cluster"
     95     ssh $PRE_LIST "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"
     96     ssh 192.168.222.162 "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"
     97     ssh $PRE_LIST "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
     98 }
     99 
    100 pre_test(){
    101     url_test "http://${PRE_LIST}/index.html"
    102     echo "add to cluster"
    103 }
    104 
    105 
    106 group1_deploy(){
    107     writelog "remove from cluster"
    108     for node in $GROUP1_LIST;do
    109         ssh $node "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"
    110         ssh $node "rm -rf /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
    111     done
    112     scp ${CONFIG_DIR}/other/192.168.222.163.crontab.xml 192.168.222.164:/webroot/web-demo/crontab.xml
    113 }
    114 
    115 group1_test(){
    116     url_test "http://192.168.222.163:80/index.html"        
    117     echo "add to cluster"
    118 }
    119 
    120 rollback_fun(){
    121     for node in $ROLLBACK_LIST;do
    122     ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo"
    123     done
    124 }
    125 
    126 rollback(){
    127 if [ -z $1 ];then
    128     shell_unlock;
    129     echo "Please input rollback version" && exit;
    130 fi
    131     case $1 in
    132     list)
    133         ls -l /opt/webroot/*.tar.gz
    134         ;;
    135     *)
    136         rollback_fun $1
    137     esac
    138 }
    139 
    140 main(){
    141    if [ -f $LOCK_FILE ];then
    142     echo "Deploy is running" && exit;
    143    fi
    144     DEPLOY_METHOD=$1
    145     ROLLBACK_VER=$2
    146     case $DEPLOY_METHOD in
    147     deploy)
    148         shell_lock;
    149         code_get;
    150         code_build;
    151         code_config;
    152         code_tar;
    153         code_scp;
    154         pre_deploy;
    155         pre_test;
    156         group1_deploy;
    157         group1_test;
    158         shell_unlock;
    159         ;;
    160     rollback)
    161         shell_lock;
    162         rollback $ROLLBACK_VER;
    163         shell_unlock;
    164         ;;
    165     *)
    166         usage;
    167     esac
    168 }
    169 main $1 $2
  • 相关阅读:
    Python3.5 学习三
    心灵鸡汤20180727
    Python3.5 学习二
    spring心得4--setter注入集合(set、list、map、properties等多种集合,配有案例解析)@基本装(引用)
    drop user和drop user cascade的区别(转)
    数据库的导入 导出
    OracleDBConsole服务无法启动原因
    create XML
    C#里面Console.Write与Console.WriteLine有什么区别????
    将字符串 按照规定编码方式编码
  • 原文地址:https://www.cnblogs.com/pythonal/p/6530006.html
Copyright © 2020-2023  润新知