#!/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
简单的CICD部署脚本
最新推荐文章于 2024-04-01 09:58:24 发布