jenkins补充-编写自动化脚本实现devops 流水线和回滚等操作
- 自动化部署脚本
- 基于参数流程控制是部署还是回滚
deploy rollback_last_version - 要实现对服务器分批次上线
host1 host2 hostall - 要实现自动clone指定分支
master develop
haproxy+keeplived
yum install socat -y
cat /etc/haproxy/haproxy.cfg
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
listen stats
mode http
bind 0.0.0.0:9999
stats enable
log global
stats uri /haproxy-status
stats auth admin:admin
listen webs
bind 192.168.10.233:80
mode http
log global
option httplog
server 192.168.10.230 192.168.10.230:8080 check inter 3000 fall 2 rise 5
server 192.168.10.231 192.168.10.231:8080 check inter 3000 fall 2 rise 5
listen tests
bind 192.168.10.234:80
mode http
log global
option httplog
server 192.168.10.230 192.168.10.230:8080 check inter 3000 fall 2 rise 5
server 192.168.10.231 192.168.10.231:8080 check inter 3000 fall 2 rise 5
cat /etc/keepalived/keepalived.conf
...
virtual_ipaddress {
192.168.10.233 dev eth0 label eth0:0
192.168.10.234 dev eth0 label eth0:1
}
jenkins
- 主机列表 IP_List
- 代码克隆 Code_Clone
- 代码打包 Make_Zip
- 关闭节点 Down_Node
- 停止服务 Stop_Tomcat
- 上传代码至 WEB服务器 Scp_Codefile
- 开户服务 Start_Tomcat
- 测试WEB服务器 Web_Test
- 删除历史版本 Del_History_Ver
- 清除历史包 CleanGz
#!/bin/bash
whoami
DATE=`date +%Y-%m-%d_%H-%M-%S`
ACTION=$1
HOST=$2
function IP_List(){
if [[ ${HOST} == "Host1" ]];then
Server_IP="192.168.10.230"
echo ${Server_IP}
elif [[ ${HOST} == "Host2" ]];then
Server_IP="192.168.10.231"
echo ${Server_IP}
# ssh root@192.168.10.220 ""echo enable server webs/${Server_IP}"| socat stdio /var/lib/haproxy/haproxy.sock"
# echo "${node} 从192.168.10.220 添加成功"
# ssh root@192.168.10.221 ""echo enable server webs/${Server_IP}"| socat stdio /var/lib/haproxy/haproxy.sock"
# echo "${node} 从192.168.10.221 添加成功"
elif [[ ${HOST} == "HostAll" ]];then
Server_IP="192.168.10.230 192.168.10.231"
echo ${Server_IP}
fi
}
function Code_Clone(){
CodeLink=git@192.168.10.254:web233/web1.git
cd /data/git/projectname && rm -rf web1 && git clone ${CodeLink}
echo "克隆代码完成"
}
function Make_Zip(){
cd /data/git/projectname/web1 && tar czvf testapp.tar.gz ./*
echo "打包完成"
}
function Down_Node(){
for node in ${Server_IP};do
ssh root@192.168.10.220 ""echo disable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 从192.168.10.220 移除成功"
ssh root@192.168.10.221 ""echo disable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 从192.168.10.221 移除成功"
done
}
function Stop_Tomcat(){
for node in ${Server_IP};do
ssh www@${node} "/etc/init.d/tomcat stop"
echo "tomcat服务关闭成功"
done
}
function Start_Tomcat(){
for node in ${Server_IP};do
ssh www@${node} "/etc/init.d/tomcat start"
echo "tomcat服务开启成功"
done
}
function Scp_Codefile(){
cd /data/git/projectname/web1/
WEB_DIR=/data/tomcat/webapps/testapp
DIR_NAME=/data/tomcat/tomcat_webdir/testapp-${DATE}
APP_NAME=/data/tomcat/tomcat_appdir/testapp-${DATE}.tar.gz
for node in ${Server_IP};do
scp testapp.tar.gz www@${node}:${APP_NAME}
ssh www@${node} "mkdir ${DIR_NAME} && tar xvf ${APP_NAME} -C ${DIR_NAME} && rm -rf ${WEB_DIR} && ln -sv ${DIR_NAME} ${WEB_DIR}"
done
}
function Web_Test(){
for node in ${Server_IP};do
NUM=`curl -s -I -m 10 -o /dev/null -w %{http_code} http://${node}:8080/testapp/index.html`
if [[ ${NUM} -eq 200 ]];then
echo "${node} 测试通过"
Add_Node ${node}
else
echo "${node} 测试失败,请检查TOMCAT服务"
fi
done
}
function Add_Node(){
node=$1
echo ${node} "----"
if [ ${node} == "192.168.10.231" ];then
echo "192.168.10.231 部署完成,请进行代码测试"
ssh root@192.168.10.220 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 从192.168.10.220 添加成功"
ssh root@192.168.10.221 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 从192.168.10.221 添加成功"
else
ssh root@192.168.10.220 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 从192.168.10.220 添加成功"
ssh root@192.168.10.221 ""echo enable server webs/${node}"| socat stdio /var/lib/haproxy/haproxy.sock"
echo "${node} 从192.168.10.221 添加成功"
fi
}
function RollBack(){
for node in ${Server_IP};do
NEW_VERSION=`ssh www@${node} ""/bin/ls -l -rt /data/tomcat/tomcat_webdir/|awk -F " " '{print $9}'|tail -n1""`
echo ${NEW_VERSION}
NAME=`ssh www@${node} ""/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-*|grep -B 1 ${NEW_VERSION} | head -n1 | awk '{print $9}'""`
ssh www@${node} "rm -rf /data/tomcat/webapps/testapp && ln -sv ${NAME} /data/tomcat/webapps/testapp"
done
}
function CleanGz(){
for node in ${Server_IP};do
NUM=`ssh www@${node} "/bin/ls -l -rt -d /data/tomcat/tomcat_appdir/testapp-*|wc -l"`
for((;$NUM>7;NUM--));do
#ssh www@${node} "rm -rf \`/bin/ls -l -rt -d /data/tomcat/tomcat__appdir/testapp-* | head -n1 | awk '{print $9}'\`"
DEL_NAME=`ssh www@${node} ""/bin/ls -l -rt -d /data/tomcat/tomcat_appdir/testapp-* | head -n1 | awk '{print $9}'""`
ssh www@${node} "rm -rf ${DEL_NAME}"
echo "${node} 清理成功 ${DEL_NAME}"
done
done
}
function Del_History_Ver(){
for node in ${Server_IP};do
NUM=`ssh www@${node} "/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-*|wc -l"`
for((;$NUM>5;NUM--));do
#ssh www@${node} "rm -rf \`/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-* | head -n1 | awk '{print $9}'\`"
DEL_NAME=`ssh www@${node} ""/bin/ls -l -rt -d /data/tomcat/tomcat_webdir/testapp-* | head -n1 | awk '{print $9}'""`
ssh www@${node} "rm -rf ${DEL_NAME}"
echo "${node} 清理成功 ${DEL_NAME}"
done
done
}
main(){
case ${ACTION} in
Deploy)
IP_List;
Code_Clone;
Make_Zip;
Down_Node;
Stop_Tomcat;
Scp_Codefile;
Start_Tomcat;
Web_Test;
Del_History_Ver;
CleanGz;
;;
RollBack)
IP_List;
Down_Node;
Stop_Tomcat;
RollBack;
Start_Tomcat;
Web_Test;
;;
esac
}
main $1 $2 $3