jenkins-shell发布模式

shell脚本实现:

滚动摘除单台负载realserver 发布线上/测试 环境版本

 

 

 

 

 

#!/bin/bash
#lb_server="192.168.1.35"
#web_server="192.168.1.37 192.168.1.38"
file="/tmp/deploy.lock"
Date=$(date +%F-%H-%M)
web_dir=/opt
web_name=web
web_name_all=${web_name}_${Date}

#加锁
lock_file(){
    if [ -f ${file} ];then
        echo "deploy脚本正在运行..."
        exit
    fi
}
#解锁
unlock_file(){
    rm -rf ${file}
}
#下线节点
remove_realserver(){
    ssh ${lb_server} "echo 'disable server web_cluster/$1' | socat stdio /var/lib/haproxy/stats"
}

#上线节点
add_realserver(){
    ssh ${lb_server} "echo 'enable server web_cluster/$1' | socat stdio /var/lib/haproxy/stats"
}

#测试可用性
test_url(){
    http_code=$(curl -s -w %{http_code} -H HOST:html.oldxu.net http://$1 -o /dev/null)
}
#代码部署
code_deploy(){
    touch $file
    cd $WORKSPACE && tar zcf ${web_dir}/${web_name_all}.tar.gz ./*
    for host in ${web_server}
    do
    #摘除节点
        remove_realserver ${host} && echo "$ip 节点摘除成功"
    #传输代码
        scp ${web_dir}/${web_name_all}.tar.gz ${host}:/opt && echo "$ip 节点代码拷贝成功..."
    #部署代码
        ssh ${host} "cd ${web_dir} && mkdir -p ${web_dir}/${web_name_all} && \
        tar xf ${web_name_all}.tar.gz -C ${web_name_all} && \
        rm -rf ${web_dir}/${web_name}
        ln -s ${web_dir}/${web_name_all} ${web_dir}/${web_name} && \
        systemctl restart nginx ; echo '$ip 节点代码部署成功'"
        test_url ${host}
        if [ $http_code -eq 200 ];then
            echo "${host} 节点代码测试通过"
            add_realserver ${host} ; echo "${host} 节点加入集群成功"
        else
            echo "${host} 测试失败"
            exit
        fi
        #等待节点添加后在继续下一台
            echo "${Date}: ${host} 节点已完成更新-->" ; sleep 5
    done
}
main(){
    lock_file
    code_deploy
    unlock_file
}
    #调用总函数
main

  

 

 

 

posted @ 2022-02-04 10:15  NeilyoX  阅读(57)  评论(0)    收藏  举报