简单的CICD部署脚本

#!/bin/bash

#================================================================
#   Copyright (C) 2021 . All rights reserved.
#   
#   文件名称:test1.sh
#   创 建 者:gan
#   创建日期:2021年08月12日
#   描    述:
#
#================================================================
set -ue
METHOD=$1
BRANCH=$2
GROUP=$3
PROJECT=app1
DATETIME=`date +"%F_%H-%M-%S"`
echo "当前方法是"${METHOD}
echo "当前分支是"${BRANCH}

function HOST_IP(){
    if [[ $GROUP == "GROUP1"  ]];then
      HOST_LIST="10.0.0.44"
    elif [[ $GROUP == "GROUP2" ]];then
      HOST_LIST="10.0.0.45 10.0.0.46"
    elif [[ $GROUP == "GROUP-ALL" ]];then
      HOST_LIST="10.0.0.44 10.0.0.45 10.0.0.46"
    fi
    echo "选择的服务器是$HOST_LIST"
}

function DEL_FROM_HAPROXY(){
  echo "正在从haproxy中摘除$HOST_LIST"
  for node in $HOST_LIST;do
     ssh root@10.0.0.47 "echo disable  server webport/$node | socat stdio /run/haproxy/admin.sock"
     ssh root@10.0.0.48 "echo disable  server webport/$node | socat stdio /run/haproxy/admin.sock"
  done
  echo "从haproxy中摘除完成"
}
function ADD_ON_HAPROXY(){
  local node=$1
  echo "正在haproxy中添加$node"
  ssh root@10.0.0.47 "echo enable  server webport/$node | socat stdio /run/haproxy/admin.sock"
  ssh root@10.0.0.48 "echo enable  server webport/$node | socat stdio /run/haproxy/admin.sock"
  echo "从haproxy中添加${node}完成"
}
function CODE_CLONE(){
  echo "开始从${BRANCH}分支克隆代码"
  cd /data/gitdata/magedu && rm -rf $PROJECT/
  if [[ $BRANCH == "main" ]];then
    git clone git@10.0.0.43:magedu/${PROJECT}.git
  elif [[ $BRANCH == "develop" ]];then
    git clone -b develop  git@10.0.0.43:magedu/${PROJECT}.git    
  fi
  echo "代码克隆完成"
}

function CODE_SCAN(){
echo "开始代码扫描"
cd /data/gitdata/magedu/${PROJECT}
/apps/sonar-scanner/bin/sonar-scanner
echo "代码扫描完成"
}



function TAR_FILE(){
   echo "开始打包"
   cd /data/gitdata/magedu
   cp -r  $PROJECT   ${PROJECT}-${DATETIME}
   zip -r ${PROJECT}-${DATETIME}.war ${PROJECT}-${DATETIME}
   rm -rf ${PROJECT}-${DATETIME}
   echo "打包完成"
}
function CODE_CP(){
   cd /data/gitdata/magedu
   for node in $HOST_LIST;do
    scp ${PROJECT}-${DATETIME}.war tomcat@${node}:/data/tomcat/tomcat_appdir/
    ssh tomcat@${node} "unzip /data/tomcat/tomcat_appdir/${PROJECT}-${DATETIME}.war -d /data/tomcat/tomcat_webdir/ && rm -rf /data/tomcat/tomcat_webapps/myapp && ln -s /data/tomcat/tomcat_webdir/${PROJECT}-${DATETIME} /data/tomcat/tomcat_webapps/myapp"
    echo "${node}${PROJECT}项目代码升级完成"
    DEL_OLD_DIR  $node 
   done
   rm -rf /data/gitdata/magedu/${PROJECT}*.war
}
function GET_TOMCAT_STATUS(){
  TOMCAT_STATUS=`ssh tomcat@${node} "ss -ntl | grep 8080 | grep LISTEN &> /tmp/tomcat.tmp;cat /tmp/tomcat.tmp"`
}
function STOP_TOMCAT(){
  for node in $HOST_LIST;do
    GET_TOMCAT_STATUS
    echo ${TOMCAT_STATUS}"huanghuang"
    if [[ $TOMCAT_STATUS == ""  ]];then
       echo $node"的tomcat已经关闭"
    fi
    ssh tomcat@${node} "/usr/local/tomcat/bin/catalina.sh stop"
    sleep 5;
    GET_TOMCAT_STATUS
    local  N=0
    while [[ $TOMCAT_STATUS != ""  ]];do
      if (( N>5  ));then
           echo  $node"的tomcat进程关闭失败"
           continue 2
      fi
      echo $node"的tomcat进程关闭失败,正在尝试重新关闭"
      ssh tomcat@${node} "/usr/local/tomcat/bin/catalina.sh stop"
      sleep 5;
      GET_TOMCAT_STATUS
      let N++
    done
    echo $node"的tomcat进程关闭成功"
  done
}
function START_TOMCAT(){
  for node in $HOST_LIST;do
    GET_TOMCAT_STATUS
    if [[ $TOMCAT_STATUS != ""  ]];then
       echo $node"的tomcat已经启动"
    fi
    ssh tomcat@${node} "/usr/local/tomcat/bin/catalina.sh start"
    sleep 5;
    GET_TOMCAT_STATUS
    local  N=0
    while [[ $TOMCAT_STATUS == ""  ]];do
      if (( N>5  ));then
           echo  $node"的tomcat进程开启失败"
           continue 2
      fi
      echo $node"的tomcat进程开启失败,正在尝试重新开启"
      ssh tomcat@${node} "/usr/local/tomcat/bin/catalina.sh start"
      sleep 5;
      GET_TOMCAT_STATUS
      let N++
    done
    echo $node"的tomcat进程开启成功"
  done
}
function WEBTEST(){
  for node in $HOST_LIST;do
     STATE=`curl -s  -I -m 10 -o /dev/null  -w %{http_code}  http://${node}:8080/myapp/index.html`
     if (( STATE == 200  ));then
        echo "$node的myapp服务测试成功,即将添加到负载"
        ADD_ON_HAPROXY $node 
     else
        echo "${node}测试失败"
     fi
  done
}
function DEL_OLD_DIR(){
  
  local node=$1
  local  array=(`ssh tomcat@10.0.0.44 "ls -d -r  /data/tomcat/tomcat_webdir/app1* > /tmp/tomcat_num.tmp;cat /tmp/tomcat_num.tmp"`)
  ssh tomcat@$node "rm -rf /data/tomcat/tomcat_appdir/*"
  for (( i=0;i<${#array[*]};i++  ));do
    if (( i>=5  ));then
         ssh tomcat@$node "rm -rf ${array[$i]}"
    fi                 
  done
  echo $node"节点上的旧版本数据删除完成"
}
function ROLLBACK-LASTVERSION(){
 for node in $HOST_LIST;do
 local NOWVERSION=`ssh tomcat@$node ls -l /data/tomcat/tomcat_webapps/myapp* | awk -F "->" '{print $2}' |xargs  basename`
 local STATE=`ssh tomcat@$node "ls /data/tomcat/tomcat_webdir/app1* &> /tmp/app1_state.tmp;cat /tmp/app1_state.tmp"`
 if [[ $STATE =~ ^.*cannot\ access.*$   ]];then
     echo "没有需要降级的文件"
     return 0
 fi   

 local  ARRAY=(`ssh tomcat@$node "ls /data/tomcat/tomcat_webdir/app1* -d -r"`)
 if [[ ${#ARRAY[*]} == 1 && ( "${ARRAY[0]}" > "$NOWVERSION" || "${ARRAY[0]}" == "$NOWVERSION"   )  ]];then
     echo "没有需要降级的文件"
     return 0
 fi
 for i in ${ARRAY[*]};do
   i=`basename $i`
   if [ "$i" \< "$NOWVERSION"  ];then
       echo "正在将${node}降级为版本$i"
       ssh tomcat@$node "rm -rf /data/tomcat/tomcat_webapps/myapp && ln -s /data/tomcat/tomcat_webdir/$i  /data/tomcat/tomcat_webapps/myapp"
       echo "降级成功"
       break 
   fi
 
 done

done

}
function main(){
  case $METHOD in 
   deploy)
HOST_IP
CODE_CLONE
#CODE_SCAN
TAR_FILE
DEL_FROM_HAPROXY
STOP_TOMCAT
CODE_CP
START_TOMCAT
WEBTEST
;;
  rollback-lastversion)
HOST_IP
DEL_FROM_HAPROXY
STOP_TOMCAT
ROLLBACK-LASTVERSION
START_TOMCAT
WEBTEST
;;
esac

}

main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值