自动化部署流程1.获取代码(直接拉取)
2.编译(可选)
3.配置文件
4.打包
5.SCP到目标服务器
6.将目标服务器移除集群
7.解压
8.放置到webroot
9.SCP差异文件
10.重启(可选)
11.测试
12.加入集群上线
回滚流程#正常回滚
1.列出回滚版本
2.目标服务移除集群
3.执行回滚
4.重启和测试
5.加入集群
#紧急回滚
1.列出回滚版本
2.执行回滚(重启)
#特急回滚
1.列出回滚上个版本(重启)
#!/bin/bash
#自动部署脚本
#需要配置
#mkdir -p /deploy/code/web-demo
#mkdir -p /deploy/config/web-demo/other
#mkdir -p /deploy/tar
#mkdir -p /deploy/tmp
#mkdir -p /opt/webroot
#mkdir -p /webroot
#给与相应权限
#chown -R root:root /deploy
#chown -R root:root /opt/webroot
#chown -R root:root /webroot
#部署节点
NODE_LIST="192.168.1.104 192.168.1.104"
ROLLBACK_LIST="192.168.1.104"
#脚本环境变量
SHELL_NAME="deploy.sh"
SHELL_DIR="/root"
SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"
#日期和时间变量
LOG_DATE=`date "+%Y-%m-%d"`
LOG_TIME=`date "+%H-%M-%S"`
CDATE=`date "+%Y-%m-%d"`
CTIME=`date "+%H-%M-%S"`
#代码变量
CODE_DIR="/deploy/code/web-demo"
CONFIG_DIR="/deploy/config/web-demo"
TMP_DIR="/deploy/tmp"
TAR_DIR="/deploy/tar"
LOCK_FILE="/tmp/run/deploy.lock"
PRO_NAME="web-demo"
#shell函数
usage(){
echo $"Usage: $0 [ deploy | rollback] | list sersion"
}
shell_lock(){
echo "11" > ${LOCK_FILE}
}
writelog(){
LOGINFO=$1
echo "${CDATE} ${CTIME}: $SHELL_NAME : ${LOGINFO}">> ${SHELL_LOG}
}
shell_unlock(){
rm -f ${LOCK_FILE}
}
#获取代码
code_get(){
writelog "code_get";
cd $CODE_DIR && echo "git pull"
/bin/cp -r ${CODE_DIR} ${TMP_DIR}/
API_VER="v2.0"
}
#编译
code_build(){
echo build
}
#配置文件
code_config(){
writelog "code_config"
/bin/cp -r ${CONFIG_DIR}/* ${TMP_DIR}/"${PRO_NAME}"
PKG_NAME="${PRO_NAME}"_"$API_VER"_"${CDATE}"-"${CTIME}"
cd ${TMP_DIR} && mv ${PRO_NAME} ${PKG_NAME}
}
#打包
code_tar(){
writelog "code_tar"
cd ${TMP_DIR} && tar czf ${PKG_NAME}.tar.gz ${PKG_NAME}
writelog " ${PKG_NAME}.tar.gz"
}
#SCP到目标服务器
code_scp(){
writelog "code_tar"
for node in $NODE_LIST
do
scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
done
}
#移除集群
cluster_node_remove(){
echo remove
writelog "cluster_remove"
}
#解压部署
code_deploy(){
writelog "code_tar-deploy"
for node in $NODE_LIST
do
ssh $node "cd /opt/webroot/ && tar zxf ${PKG_NAME}.tar.gz"
ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
done
}
#差异配置文件
config_diff(){
scp ${CONFIG_DIR}/othe/eiff-config.xml 192.168.1.104:/opt/webroot/${PKG_NAME}/cheyi.config.xml
}
#测试
code_test(){
curl -s -I http://192.168.1.104/index.html|grep "200"
if [ $? -ne 0 ];then
shell_unlock;
writelog "test erro" && exit;
fi
}
cluster_node_in(){
echo cluster-in
}
rollback_fun(){
if [ -z $1 ];then
echo "rollback [没输入回滚的版本]"
shell_unlock;
exit
fi
for node in $ROLLBACK_LIST
do
ssh $node "if [ -d /opt/webroot/$1 ];then /usr/bin/rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo;fi"
done
}
rollback(){
case $1 in
list)
ssh $ROLLBACK_LIST "ls -l /opt/webroot/*.tar.gz"
;;
*)
rollback_fun $1
;;
esac
}
main(){
if [ -f $LOCK_FILE ];then
echo "此脚本正在执行" && exit;
fi
case $1 in
deploy)
shell_lock;
code_get;
code_build;
code_config;
code_tar;
code_scp;
cluster_node_remove;
code_deploy;
config_diff;
code_test;
cluster_node_in;
shell_unlock;
;;
rollback)
shell_lock;
rollback $2;
shell_unlock;
;;
*)
usage;
esac
}
main $1 $2
赞2
踩0
本文标签:这篇文章木有标签
版权声明:若无特殊注明,本文为《橙子柠檬》原创,转载请保留文章出处。
本文链接:https://qinzc.me/post-190.html
正文到此结束