博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用shell脚本完成自动化部署及秒级回滚
阅读量:5367 次
发布时间:2019-06-15

本文共 6341 字,大约阅读时间需要 21 分钟。

一、部署机代码目录结构

  使用www用户进行代码部署,所有部署机上需要创建www用户,并赋予根目录权限,同时配置公私钥认证建立信任关系。

[www@ansible-node1 deploy]$ tree.├── code│?? └── web-demo  #存放代码│??     ├── index.html│??     └── \351\227\256├── config             #存放服务器配置文件│?? └── web-demo│??     ├── base│??     │?? └── config.ini│??     └── other│??         └── 192.168.226.130.crontab.xml  #不同机器之间的差异匹配值文件├── tar  └── tmp

二、部署节点

ip:192.168.226.130、192.168.226.132 分别模拟两个主机组来部署不同代码

web根目录: /webroot/webdemo、同时赋予www用户权限

历史代码版本保存路径: /opt/webroot、同时赋予www用户权限

三、使用gitlab来管理代码(在此不做介绍)

四、主要作用

  通过脚本,模拟线上环境,实现代码的半自动化部署,以及秒级回滚。

五、脚本实现  

  流程:获取代码(直接拉取)-----> 编译(可选)-------> 配置文件 ------>打包 -----> scp到目标服务器---->将目标机服务器移除集群----->解压---->放置到webroot----->scp差异文件----->重启(可选)----->测试----->加入集群

[www@ansible-node1 ~]$ cat deploy.sh#!/bin/bash#Node ListGROUP1_LIST="192.168.226.130"GROUP2_LIST="192.168.226.132"ROLLBACK_LIST="192.168.226.130 192.168.226.132"#Date/Time VeriablesLOG_DATE=`date "+%Y-%m-%d"`LOG_CTIME=`date "+%H-%M-%S"`CDATE=$(date "+%Y-%m-%d")CTIME=$(date "+%H-%M-%S")#Shell EnvSHELL_NAME="deploy.sh"SHELL_DIR="/home/www/"SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"#Code EnvPRO_NAME="web-demo"CODE_DIR="/deploy/code/web-demo"CONFIG_DIR="/deploy/config/web-demo"TMP_DIR="/deploy/tmp"TAR_DIR="/deploy/tar"LOCK_FILE="/tmp/deploy.lock"usage(){        echo $"Usage: $0 {deploy | rollback  [ list | version]}"}writelog(){        LOGINFO=$1        echo "${CDATE} ${CTIME}: ${SHELL_NAME} : ${LOGINFO}" >> ${SHELL_LOG}}shell_lock(){        touch ${LOCK_FILE}}shell_unlock(){        rm -rf ${LOCK_FILE}}code_get(){        writelog code_get        cd $CODE_DIR && git pull    #需要提前从git仓库clone代码到部署机代码存放目录$CODE_DIR        cp -r ${CODE_DIR} ${TMP_DIR}/        API_VERL=$(git show | grep commit  | cut -d ' ' -f2)        API_VER=$(echo ${API_VERL:0:6})}code_build(){        echo code_build}code_config(){        echo code_config        /bin/cp -r $CONFIG_DIR/base/* $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"}code_scp(){        writelog "code_scp"        for node in $GROUP1_LIST;do                scp ${TMP_DIR}/${PKG_NAME}.tar.gz  $node:/opt/webroot        done        for node in $GROUP2_LIST;do                scp ${TMP_DIR}/${PKG_NAME}.tar.gz  $node:/opt/webroot        done}cluster_node_remove(){        writelog "iluster_node_remove"}url_test(){        URL=$1        curl -s --head $URL | grep "200 OK"        if [ $? -ne 0 ];then                shell_unlock;                writelog "test error" && exit;        fi}group1_deploy(){        echo code_deploy        for node in $GROUP1_LIST;do                ssh $node "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"                ssh $node "rm -rf /webroot/web-demo && ln -sf /opt/webroot/${PKG_NAME} /webroot/web-demo"    done}group1_test(){        url_test "http://192.168.226.130/index.html"        echo "add to cluster"}group2_deploy(){        echo code_deploy        for node in $GROUP2_LIST;do                ssh $node "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"                ssh $node "rm -rf /webroot/web-demo && ln -sf /opt/webroot/${PKG_NAME} /webroot/web-demo"    done}group2_test(){        url_test "http://192.168.226.132/index.html"        echo "add to cluster"}config_diff(){        echo config_diff        scp ${CONFIG_DIR}/other/192.168.226.130.crontab.xml 192.168.226.130:/webroot/web-demo/crontab.xml}code_test(){        echo code_test}cluster_node_in(){        echo cluster_node}rollback_fun(){        for node in $ROLLBACK_LIST;do                ssh $node "rm -rf /webroot/web-demo && ln -sf /opt/webroot/$1 /webroot/web-demo"    done}rollback(){        if [ -z $1 ];then                 shell_unlock;                echo "Please input rollback version" && exit        fi        case $1 in                list)                        ssh $GROUP1_LIST "ls -l /opt/webroot/*.tar.gz"                        ;;                *)                        rollback_fun $1        esac}main(){        if [ -f $LOCK_FILE ];then                echo "Deploy  is running" && exit;        fi        DEPLOY_METHOD=$1        ROLLBACK_VER=$2        case $DEPLOY_METHOD in                deploy)                                shell_lock;                                code_get;                                code_build;                                code_config;                                code_tar;                                code_scp;                                cluster_node_remove;                                group1_deploy;                                config_diff;                                group1_test;                                group2_deploy;                                group2_test;                                cluster_node_in;                                shell_unlock;                                ;;                rollback)                                shell_lock                                rollback $ROLLBACK_VER;                                shell_unlock;                                ;;                *)                                usage;        esac}main $1 $2

六、执行脚本

[www@ansible-node1 ~]$ bash deploy.sh Usage: deploy.sh {deploy | rollback  [ list | version]}[www@ansible-node1 ~]$ bash deploy.sh deploy  #部署代码[www@ansible-node1 ~]$ bash deploy.sh rollback list  #列出代码版本-rw-rw-r-- 1 www www  228 Mar  7 17:03 /opt/webroot/web-demo_123_2018-03-07-17-03-52.tar.gz-rw-rw-r-- 1 www www  231 Mar  7 17:05 /opt/webroot/web-demo_123_2018-03-07-17-05-24.tar.gz-rw-rw-r-- 1 www www  233 Mar  7 17:07 /opt/webroot/web-demo_123_2018-03-07-17-07-02.tar.gz-rw-rw-r-- 1 www www  231 Mar  7 17:10 /opt/webroot/web-demo_123_2018-03-07-17-10-36.tar.gz-rw-rw-r-- 1 www www  234 Mar  8 16:24 /opt/webroot/web-demo_123_2018-03-08-16-24-17.tar.gz-rw-rw-r-- 1 www www  230 Mar  8 16:26 /opt/webroot/web-demo_123_2018-03-08-16-26-51.tar.gz-rw-rw-r-- 1 www www  230 Mar  8 16:30 /opt/webroot/web-demo_123_2018-03-08-16-30-15.tar.gz-rw-rw-r-- 1 www www  229 Mar  8 16:31 /opt/webroot/web-demo_123_2018-03-08-16-31-25.tar.gz[www@ansible-node1 ~]$  bash deploy.sh rollback web-demo_3d9c99_2018-03-12-16-27-54  #回滚到指定版本

 

转载于:https://www.cnblogs.com/lwf-blog/p/8550411.html

你可能感兴趣的文章
Angular ui-router的常用配置参数详解
查看>>
软考知识点梳理--项目评估
查看>>
把特斯拉送上火星的程序员,马斯克!
查看>>
三测单
查看>>
MyBatis 缓存
查看>>
SQL中left outer join与inner join 混用时,SQL Server自动优化执行计划
查看>>
mac下python实现vmstat
查看>>
jxl.dll操作总结
查看>>
成员函数对象类的const和非const成员函数的重载
查看>>
机器学习实战-----八大分类器识别树叶带源码
查看>>
eclipse git 新的文件没有add index选项
查看>>
java 泛型
查看>>
VC NetShareAdd的用法
查看>>
java web项目中后台控制层对参数进行自定义验证 类 Pattern
查看>>
图论学习一之basic
查看>>
Java的Array和ArrayList
查看>>
记录Ubuntu 16.04 安装Docker CE
查看>>
安东尼奥·维瓦尔第——巴洛克音乐的奇葩
查看>>
pandas的增删改查
查看>>
HDU 5933/思维
查看>>