linux 内核 回滚,Linux自动化部署流程-秒级回滚-shell脚本 - 橙子柠檬's Blog

自动化部署流程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

9b3f1f9d309c0ae54cf617076dee0ca0.png赞2

c788d2554644b6a03084e98b2926d709.png

380c82d9930cb6b75d8471e9cb2da8a3.png踩0

本文标签:这篇文章木有标签

版权声明:若无特殊注明,本文为《橙子柠檬》原创,转载请保留文章出处。

本文链接:https://qinzc.me/post-190.html

正文到此结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值