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