jenkins之代码部署回滚脚本
#!/bin/bash
DATE=`date +%Y-%m-%d_%H-%M-%S`
METHOD=$1
BRANCH=$2
GROUP_LIST=$3 function IP_list(){
if [[ ${GROUP_LIST} == "online-group1" ]];then
Server_IP="192.168.7.105"
echo ${Server_IP}
elif [[ ${GROUP_LIST} == "online-group2" ]];then
Server_IP="192.168.7.106"
echo ${Server_IP}
ssh root@192.168.7.103 ""echo enable server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
ssh root@192.168.7.104 ""echo enable server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
elif [[ ${GROUP_LIST} == "online-all" ]];then
Server_IP="192.168.7.105 192.168.7.106"
echo ${Server_IP}
fi
} function clone_code(){
rm -rf /data/git/linux37/web1
cd /data/git/linux37
git clone -b ${BRANCH} git@192.168.7.101:linux37/web1.git
} function scanner_code(){
cd /data/git/linux37/web1 && /usr/local/sonar-scanner/bin/sonar-scanner
} function make_zip(){
cd /data/git/linux37/web1 && zip -r code.zip ./*
} down_node(){
for node in ${Server_IP};do
ssh root@192.168.7.103 "echo "disable server myapp/${node}" | socat stdio /run/haproxy/admin.sock"
echo "${node} 在负载均衡192.168.7.103下线成功"
ssh root@192.168.7.104 "echo "disable server myapp/${node}" | socat stdio /run/haproxy/admin.sock"
echo "${node} 在负载均衡192.168.7.104下线成功"
done
} function stop_tomcat(){
for node in ${Server_IP};do
ssh tomcat@${node} "/etc/init.d/tomcat stop"
done
} function start_tomcat(){
for node in ${Server_IP};do
ssh tomcat@${node} "/etc/init.d/tomcat start"
#sleep 5
done
} function scp_zipfile(){
for node in ${Server_IP};do
scp /data/git/linux37/web1/code.zip tomcat@${node}:/data/tomcat/tomcat_appdir/code-${DATE}.zip
ssh tomcat@${node} "unzip /data/tomcat/tomcat_appdir/code-${DATE}.zip -d /data/tomcat/tomcat_webdir/code-${DATE} && rm -rf /data/tomcat/tomcat_webapps/myapp && ln -sv /data/tomcat/tomcat_webdir/code-${DATE} /data/tomcat/tomcat_webapps/myapp"
done
} function web_test(){
#sleep 20
for node in ${Server_IP};do
NUM=`curl -s -I -m 10 -o /dev/null -w %{http_code} http://${node}:8080/myapp/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 [[ ${GROUP_LIST} == "online-all" ]];then
ssh root@192.168.7.103 ""echo enable server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
ssh root@192.168.7.104 ""echo enable server myapp/192.168.7.105" | socat stdio /run/haproxy/admin.sock"
fi
##########################################
if [ ${node} == "192.168.7.105" ];then
echo "192.168.7.105 部署完毕,请进行代码测试!"
else
ssh root@192.168.7.103 ""echo enable server myapp/${node}" | socat stdio /run/haproxy/admin.sock"
ssh root@192.168.7.104 ""echo enable server myapp/${node}" | socat stdio /run/haproxy/admin.sock"
fi
} function rollback_last_version(){
for node in ${Server_IP};do
NOW_VERSION=`ssh tomcat@${node} ""/bin/ls -l -rt /data/tomcat/tomcat_webapps/ | awk -F"->" '{print $2}' | tail -n1""`
NOW_VERSION=`basename ${NOW_VERSION}`
echo $NOW_VERSIONG
NAME=`ssh tomcat@${node} ""ls -l -rt /data/tomcat/tomcat_webdir/ | grep -B 1 ${NOW_VERSION}| head -n 1| awk '{print $9}'""`
ssh tomcat@${node} "rm -rf /data/tomcat/tomcat_webapps/myapp && ln -sv /data/tomcat/tomcat_webdir/${NAME} /data/tomcat/tomcat_webapps/myapp"
echo "${node} 回滚至${NAME}成功"
done
} main(){
case $1 in
deploy)
IP_list;
clone_code;
scanner_code;
make_zip;
down_node;
stop_tomcat;
scp_zipfile;
start_tomcat;
web_test;
;;
rollback_last_version)
IP_list;
echo ${Server_IP}
down_node;
stop_tomcat;
rollback_last_version;
start_tomcat;
web_test;
;;
esac
} main $1 $2 $3
jenkins之代码部署回滚脚本的更多相关文章
- 【linux】【jenkins】jenkins构建、mvn或者npm打包、docker运行、失败自动回滚脚本
小白对jenkins运维的使用有点简单的想法,这里开个记录贴记录下. 由于未找到jenkins构建失败后执行其他脚本的插件,也暂时没有使用其他运维工具.所以想自己写一个shell脚本,一是方便其他人使 ...
- git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
[git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...
- 【GIT】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
[git 删除本地分支] git branch -D br [git 删除远程分支] git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退 ...
- 【转】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚
转载自:http://m.blog.csdn.net/blog/lihongli528628/45483463 [git 删除本地分支] git branch -D br [git 删除远程分支] g ...
- SVN代码的回滚二
SVN代码的回滚: 不丢失新建的文件,获得最新的SVN版本控制.TortoiseSVN-ShowLog-选中你要回滚的版本-右键-Export,之后将修改的文件覆盖到你的最新版本,commit即可. ...
- git远程库代码版本回滚方法
最近使用git时, 造成了远程库代码需要回滚到之前版本的情况,为了解决这个问题查看了很多资料. 问题产生原因: 提交了错误的版本到远程库. 以下是解决的方法, 供大家参考: 1.对本地代码库进行回滚 ...
- git远程代码库回滚(webstorm下)
git远程代码库回滚(webstorm下) 1. 场景 添加了一个文件[file-for-test.js]到git的控制下 进行了三次修改,并分别进行了三次commit,最后进行了一次push git ...
- 解析binlog生成MySQL回滚脚本
如果数据库误操作想恢复数据.可以试试下面这个脚本.前提是执行DML操作. #!/bin/env python #coding:utf-8 #Author: Hogan #Descript : 解析bi ...
- seata代码控制回滚和临时挂起分布式事物
seata代码控制回滚和临时挂起分布式事物 一.说明 二.功能实现 1.手动回滚分布式事物 2.临时挂起分布式事物 三.完整代码 四 参考链接 一.说明 此处只是简单的记录一下,使用了 Seata后, ...
随机推荐
- MySQL新建用户并赋予权限:解决命令行与Navicat展示数据库不一致问题
1.创建新用户 'xiaoxiao'密码'123456' mysql> CREATE USER 'xiaoxiao'@'localhost' IDENTIFIED BY '123456'; 2. ...
- 设计模式二--模板方法Template method
模式分类: 书籍推荐:重构-改善既有代码的设计 重构获得模式 设计模式:现代软件设计的特征是"需求的频繁变化".设计模式的要点是 "寻找变化点,然后在变化点处应用设计模式 ...
- 了解一下Git的常用语句
简单学习了一下Git,整理了一点常用语句 http连接 git clone https://仓库地址 连接githup cd shop 进入文件夹 git config --global user.n ...
- 第2章-6 求交错序列前N项和 (15分)
第2章-6 求交错序列前N项和 (15分) 本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+- 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格式: 在 ...
- Part 21 to 22 AngularJS anchorscroll
Part 21 AngularJS anchorscroll example $anchorscroll service is used to jump to a specified element ...
- ajax的post请求获取kfc官网数据
# _*_ coding : utf-8 _*_# @Time : 2021/11/2 13:45# @Author : 秋泊酱 # 1页 # http://www.kfc.com.cn/kfccda ...
- 如何使用原生的Hystrix
什么是Hystrix 前面已经讲完了 Feign 和 Ribbon,今天我们来研究 Netflix 团队开发的另一个类库--Hystrix. 从抽象层面看,Hystrix 是一个保护器.它可以保护我们 ...
- Prometheus的监控解决方案(含监控kubernetes)
prometheus的简介和安装 Prometheus(普罗米修斯)是一个开源系统监控和警报工具,最初是在SoundCloud建立的.自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有 ...
- [loj539]旅游路线
考虑枚举加油的位置,当确定某次在第$i$个位置加油后,且下一次到$j$加油,那么$i$到$j$必然会选择不超过$c_{i}$条边且最长的路径,记作$d_{i,j}$ 如果能求出$d_{i,j}$,再设 ...
- JDK中Lambda表达式的序列化与SerializedLambda的巧妙使用
前提 笔者在下班空余时间想以Javassist为核心基于JDBC写一套摒弃反射调用的轻量级的ORM框架,过程中有研读mybatis.tk-mapper.mybatis-plus和spring-boot ...