持续集成之Jenkins结合脚本实现代码自动化部署及(3)

emergency_code_get(){ #获取代码的函数
    writelog "code_get"
    cd ${CODE_DIR} && git reset --hard HEAD^  #进入到代码目录更新代码,此处必须免密码更新,此目录仅用于代码更新不能放其他任何文件
    /bin/cp -rf ${CODE_DIR} ${TMP_DIR}/ #临时保存代码并重命名,包名为时间+版本号,准备复制到web服务器
    API_VERL=$(git show | grep commit | cut -d ' ' -f2)
    API_VER=$(echo ${API_VERL:0:8}) #取八位
}

emergency(){  #紧急回退到上一个版本函数
    emergency_code_get #执行将代码回退到上一个版本函数
    code_build; #如果要编译执行编译函数
        code_config; #cp配置文件
        code_tar; #打包
        code_scp; #scp到服务器
        cluster_node_remove;
        pre_deploy; #预生产环境部署
        pre_test; #预生产环境测试
        group1_deploy; #生产环境部署
        group1_test; #生产环境测试
        code_config; #cp差异文件
        #code_test; #代码测试
        shell_unlock #执行完成后删除锁文件
}

rollback_fun(){
    for node in $ROLLBACK_LIST;do # 循环服务器节点列表
        # 注意一定要加"号,否则无法在远程执行命令
        ssh $node "rm -f /webroot/web-demo && ln -s /opt/webroot/$1 /webroot/web-demo" # 立即回滚到指定的版本,$1即指定的版本参数
        echo "${node} rollback success!"
        done
}

rollback(){ # 代码回滚主函数
    if [ -z $1 ];then
        shell_unlock # 删除锁文件
        echo "Please input rollback version" && exit 3;
    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 10
    fi
    DEPLOY_METHOD=$1 # 避免出错误将脚本的第一个参数作为变量
    ROLLBACK_VER=$2
    case $DEPLOY_METHOD in
        deploy) # 如果第一个参数是deploy就执行以下操作
            shell_lock; # 执行部署之前创建锁。如果同时有其他人执行则提示锁文件存在
            code_get; # 获取代码
            code_build; # 如果要编译执行编译函数
            code_config; # cp配置文件
            code_tar;    # 打包
            code_scp;    # scp到服务器
            pre_deploy;  # 预生产环境部署
            pre_test;    # 预生产环境测试
            group1_deploy; # 生产环境部署
            group1_test;  # 生产环境测试
            shell_unlock; # 执行完成后删除锁文件
            ;;
        rollback) # 如果第一个参数是rollback就执行以下操作
            shell_lock; # 回滚之前也是先创建锁文件
            rollback $ROLLBACK_VER;
            shell_unlock; # 执行完成删除锁文件
            ;;
        emergency)
        emergency; #紧急回退就不需要参数了,但是在执行的时候要确认一下是否要紧急回退,避免输入错误
        ;;
        *)
            usage;
    esac
}
main $1 $2

1.1.4:修改当前web页面:

[www@master ~]$ cd web-demo
[www@master web-demo]$ echo "<h1>jenkins deploy test" > index.html
[www@master web-demo]$ git add index.html
[www@master web-demo]$ git commit -m "jenkins deploy test"
[master 9a43cf5] jenkins deploy test
1 file changed, 1 insertion(+), 1 deletion(-)
[www@master web-demo]$ git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@192.168.3.198:web/web-demo.git
beb37cb..9a43cf5 master -> master
Branch master set up to track remote branch master from origin.

持续集成之Jenkins结合脚本实现代码自动化部署及

1.4:回滚到任意版本:
1.4.1:在哪看回滚到的版本?:
$ ll /deploy/tmp/ #部署服务器,web服务器在nginx定义的目录查看版本

1.4.3:在jenkins执行回滚:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e78aaa5ef7a343e1e6f63bdaa2b471e6.html