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



浙公网安备 33010602011771号