zoukankan      html  css  js  c++  java
  • CI持续集成系列之(九)代码发布脚本模板书写

    前言

    前面我们介绍了Jenkins来发布项目通过nginx来展示流程,那里只是提供了一个简单的测试脚本,接下来呢介绍一下一个比较完善的发布脚本,该脚本可实现从gitlab服务器获取代码,打包,部署到WEB服务器,回滚到任意版本,一键回滚到上一版本。脚本可以当做模板来套用,屡试不爽,enjoy吧!!

    详细内容

    1、环境准备

    首先,脚本发布一定是用普通用户www来发布。脚本放在www的用户家目录,每个WEB都创建www用户并且UID相同,web目录和权限一致,其次需要创建一些必须的文件目录。

    # mkdir -p /deploy/code/web-demo -p
    # mkdir -p /deploy/config/web-demo/base
    # mkdir -p /deploy/config/web-demo/other
    # mkdir -p /deploy/tar
    # mkdir -p /deploy/tmp
    # mkdir -p /opt/webroot
    # mkdir /webroot
    # chown -R www:www /deploy
    # chown -R www:www /opt/webroot
    # chown -R www:www /webroot

    2、脚本内容

    #!/bin/bash
    # Description:本脚本主要完成的动作是部署、回滚,首先从我们私有的gitlab仓库拉下web-demo项目(http://192.168.56.11/web/web-demo.git),然后打包、压缩、scp到192.168.56.12:/webroot/、解压、然后最后通过nginx访问http://192.168.56.12/,查看结果。
    # Dir List   需要创建的目录
    # mkdir -p /deploy/code/web-demo -p
    # mkdir -p /deploy/config/web-demo/base
    # mkdir -p /deploy/config/web-demo/other
    # mkdir -p /deploy/tar
    # mkdir -p /deploy/tmp
    # mkdir -p /opt/webroot
    # mkdir /webroot
    # chown -R www:www /deploy
    # chown -R www:www /opt/webroot
    # chown -R www:www /webroot
    
    #服务器节点:
    # Node List
    PRE_LIST="192.168.56.11"      #gitlab地址
    GROUP1_LIST="192.168.56.12"   #WEB服务IP地址
    
    #回滚服务器列表
    ROLLBACK_LIST="192.168.56.11 192.168.56.12"
    
    #日期和时间变量(时间不固定)
    # Date/Time Veriables   
    LOG_DATE='date "+%Y-%m-%d"'
    LOG_TIME='date "+%H-%M-%S"'
    
    #代码打包时间变量(固定时间)
    CDATE=$(date "+%Y-%m-%d")
    CTIME=$(date "+%H-%M-%S")
    
    #变量
    # Shell Env   
    #脚本名称
    SHELL_NAME="deploy_all.sh"  
    
    #脚本路径 
    SHELL_DIR="/home/www/"
    
    #脚本执行日志文件路径        
    SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log"   
    
    #代码变量
    # Code Env
    
    #项目名称,此名称是从gitlab服务器clone下来的代码目录
    PRO_NAME="web-demo"
    
    #从gitlab服务器更新代码的目录
    CODE_DIR="/deploy/code/web-demo" 
    
    #项目配置文件  
    CONFIG_DIR="/deploy/config/web-demo"  配置目录
    
    #代码临时目录,从git 服务器获取到的代码放在这里打包在部署到WEB服务器
    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}
    }
    
    #判断
    url_test(){
            URL=$1
        curl -s --head $URL | grep '200 OK'
        if [ $? -ne 0 ];then
            shell_unlock;
            echo "test error" && exit;
        fi
    }
    #删除锁
    shell_unlock(){
        rm -f ${LOCK_FILE}
    }
    #拉取代码
    code_get(){
        writelog "code_get";
        cd $CODE_DIR && git pull
        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_guild
    }
    code_config(){
        writelog "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 $PRE_LIST;do
            scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
        for node in $GROUP1_LIST;do
            scp ${TMP_DIR}/${PKG_NAME}.tar.gz $node:/opt/webroot/
        done
    }
    pre_deploy(){
        writelog "remove from cluster"
            ssh $PRE_LIST "cd /opt/webroot && tar zxf ${PKG_NAME}.tar.gz"
            ssh $PRE_LIST "rm -f /webroot/web-demo && ln -s /opt/webroot/${PKG_NAME} /webroot/web-demo"
    }
    pre_test(){
        url_test "http://${PRE_LIST}/index.html"
        echo "d to cluster"
    }
    group1_deploy(){
        writelog "remove from cluster"
        for node in $GROUP1_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
        scp ${CONFIG_DIR}/other/192.168.56.12.crontab.xml 192.168.56.12:/webroot/web-demo/crontab.xml
    }
    group1_test(){
        url_test "http://192.168.56.12/index.html"    
        echo "add to cluster"
    }
    rollback_fun(){
        for node in $ROLLBACK_LIST;do
        ssh $node "rm -f /webroot/web-demo && ln -s /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)
            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;
    #        pre_deploy;
    #        pre_test;
            group1_deploy;
            group1_test;
            shell_unlock;
            ;;
        rollback)
            shell_lock;
            rollback $ROLLBACK_VER;
            shell_unlock;
            ;;
        *)
            usage;
        esac
    }
    main $1 $2
  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/hackerer/p/6293540.html
Copyright © 2011-2022 走看看