1.jenkins配置的构建服务脚本
if [ "$environment" == test ]; then #判断jenkins参数所选择的环境
#发布新版本到112服务器
ssh root@10.1.60.80 sh /etc/jb/1.sh #将112服务器的流量切掉
if [ $? == 0 ]; then #判断是否切成功
sleep 10 #等待10s,等112服务器上的老进程跑完
ssh root@10.1.60.112 sh /etc/jar/del.sh #将112服务器上的旧jar包备份,并将服务关闭
scp /root/.jenkins/workspace/sy/target/*.jar root@10.1.60.112:/etc/jar/ #将新的jar包传到112服务器上
ssh root@10.1.60.112 sh /etc/jar/start.sh #启动新的jar包服务
WAIT_TIME=120 #创建一个参数
a_port_open() { #将下面的判断语句赋值到a_port_open
A=`curl -i 10.1.60.112:8083|awk 'NR==1'|awk '{print $2}'` #取112服务的端口状态
if [ $A == 200 ]; then #判断112服务的端口状态是否正常,等于200服务就是正常的
return 0 #若是正常返回0
else
return 1 #不正常返回1
fi
}
a_time=0 #创建一个参数
while ! a_port_open; do #while循环并判断a_port_open的值是否为0,若为0则退出循环,不为0则一直循环
sleep 1 #休眠1s
a_time=$((a_time+1)) #将a_time变量值加1
if [ $a_time > $WAIT_TIME ]; then #判断a_time变量值是否大于WAIT_TIME变量值,相当于判断服务是否超过120秒还未启动
exit 1 #若超过120秒未启动退出状态为1
fi
done
else
echo "nginx更改权限失败,请检查nginx配置文件"
exit 2
fi
if [ $? == 0 ]; then #判断上面112服务器是否部署成功
#发布新版本到114服务器
ssh root@10.1.60.80 sh /etc/jb/2.sh #退出状态等于0说明新服务部署成功,将114的流量切到112上
if [ $? == 0 ]; then #判断是否切成功
sleep 10
ssh root@10.1.60.114 sh /etc/jar/del.sh
scp /root/.jenkins/workspace/sy/target/*.jar root@10.1.60.114:/etc/jar/
ssh root@10.1.60.114 sh /etc/jar/start.sh
b_port_open() {
B=`curl -i 10.1.60.114:8083|awk 'NR==1'|awk '{print $2}'`
if [ $B == 200 ]; then
return 0
else
return 1
fi
}
b_time=0
while ! b_port_open; do
sleep 1
b_time=$((b_time+1))
if [ $b_time > $WAIT_TIME ]; then
exit 1
fi
done
if [ $? == 0 ]; then
ssh root@10.1.60.80 sh /etc/jb/3.sh #将流量重新平均分配到112和114服务器上
if [ $? == 0 ]; then
echo "服务发布完成"
else
echo "nginx更改权限失败,请检查nginx配置是否正确"
exit 2
fi
else
echo "服务有问题,请检查服务"
exit 2
fi
else
echo "nginx更改权限失败,请检查nginx配置是否正确"
exit 2
fi
else
echo "112服务未部署成功"
exit 2
fi
else #判断jenkins参数所选择的环境的else
#测试环境就按上面得写就行,改一下ip地址
fi
2.112和114应用服务器上的脚本(通过远程执行的脚本所有路径必须写完整路径)
del.sh
#!/bin/bash
A=`netstat -tlpn |grep :8083|wc -l`
B=`netstat -tlpn |grep :8083|awk '{print $7}'|awk -F '/' '{print $1}'` #取服务的进程pid
if [ $A == 0 ]; then #判断服务是否存活
rm -rf *.bak #删除以前备份的jar包
mv $(ls /etc/jar/*.jar) $(ls /etc/jar/*.jar)".bak" #将旧的jar包备份
else
kill -9 $B #通过pid将服务关闭
rm -rf *.bak #删除以前备份的jar包
mv $(ls /etc/jar/*.jar) $(ls /etc/jar/*.jar)".bak" #将旧的jar包备份
fi
start.sh
#!/bin/bash
nohup /etc/java/jdk1.8.0_121/bin/java -jar /etc/jar/*.jar &>/etc/jar/java.log& #前面的&表示且,后面的&表示后台执行
给两个脚本添加执行权限
chmod +x /etc/jar/del.sh
chmod +x /etc/jar/start.sh
3.配置80服务器切流量脚本
1.sh
#!/bin/bash
sed -i '/10.1.60.112:8083/s/^/#/g' /etc/nginx/conf.d/test.conf #112应用服务器的流量切掉,即在配置项前面加#注释掉
nginx -s reload #优雅的重载nginx配置文件
if [ $? == 0 ]; then #判断是否正常重启
exit 0 #退出状态为0,给jenkins的脚本去判断nginx是否成功执行
else
exit 2 #退出状态为2,给jenkins的脚本去判断nginx是否成功执行
fi
2.sh
#!/bin/bash
sed -i '/10.1.60.112:8083/s/.//' /etc/nginx/conf.d/test.conf #将流量重新分配回112应用服务器,即将配置项前的#去掉
sed -i '/10.1.60.114:8083/s/^/#/g' /etc/nginx/conf.d/test.conf #将114应用服务器的流量切掉,即在配置项前面加#注释掉
nginx -s reload
if [ $? == 0 ]; then
exit 0
else
exit 2
fi
3.sh
#!/bin/bash
sed -i '/10.1.60.114:8083/s/.//' /etc/nginx/conf.d/test.conf #将流量重新分配到114服务器上
nginx -s reload
if [ $? == 0 ]; then
exit 0
else
exit 2
fi
给三个脚本添加执行权限
chmod +x /etc/jb/1.sh
chmod +x /etc/jb/2.sh
chmod +x /etc/jb/3.sh
nginx切流量这一块也可以通过切换多个不同的配置文件去切流量
nginx项目配置文件