运维线上业务版本自动回退脚本
文章目录
运维线上业务版本自动回退脚本
引
针对线上业务出现问题或
Bug
,导致业务不稳定等情况,需要紧急回退上个或上上个版本,写了个自动回退脚本业务环境:
Docker
回退效果
回退失败情况:检测不到上个版本的镜像,也就是只有一个镜像的时候,会回退失败
# 回退成功
[root@h119 ~]# sh scripts/reback.sh
>>>>>>>>>>>>>>>> 线上业务版本回退工具 <<<<<<<<<<<<<<<<
************************************************************
* 说明: *
* 1、回退版本:回退上个版本; *
* 2、回退失败:是因为没找到有上个版本的镜像; *
************************************************************
此服务器可回退应用列表:
1) ehu-life 3) ehu-job 5) 退出
2) ehu-life-cms 4) ehu-life-cms-pro
请输入功能编号来选择您要回退的应用>>> 1
fda2332a44854a70441c243dc32826cc62a88ac3f65cfbdf8943f6684ebc4565
回退成功!
# 回退失败
[root@h119 ~]# sh scripts/reback.sh
>>>>>>>>>>>>>>>> 线上业务版本回退工具 <<<<<<<<<<<<<<<<
************************************************************
* 说明: *
* 1、回退版本:回退上个版本; *
* 2、回退失败:是因为没找到有上个版本的镜像; *
************************************************************
此服务器可回退应用列表:
1) ehu-life 3) ehu-job 5) 退出
2) ehu-life-cms 4) ehu-life-cms-pro
请输入功能编号来选择您要回退的应用>>> 1
ehu-life
"docker run" requires at least 1 argument.
See 'docker run --help'.
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
回退失败!
reback.sh
[root@h119 ~]# cat scripts/reback.sh
#!/bin/bash
# 默认回退1个版本
# NR==2:回退1个版本
# NR==3:回退2个版本
Life=`docker images | grep 'harbor.xxx.com/build/ehu-life' | grep -v cms | awk 'NR==2{print $3}'`
Cms=`docker images | grep 'harbor.xxx.com/build/ehu-life-cms' | awk 'NR==2{print $3}'`
Cms119=`docker images | grep 'harbor.xxx.com/build/ehu-cms-c2c_pro' | awk 'NR==2{print $3}'`
Job=`docker images | grep 'harbor.xxx.com/build/ehu-job' | awk 'NR==2{print $3}'`
Commons=`docker images | grep 'harbor.xxx.com/build/ehu-commons' | awk 'NR==2{print $3}'`
IF() {
if [ $? -eq 0 ];then echo "回退成功!" && exit; else echo "回退失败!" && exit; fi
}
ehu_life() {
docker rm -f ehu-life
docker run -dit \
-p 8886:8080 \
-p 9999:9999 \
-e "SPRING_PROFILES_ACTIVE=pro" \
-e "SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE-URL=http://xx.xx.xx.xx:8886" \
-v /opt/appdata:/opt/appdata \
-v /opt/logs/life:/opt/logs/life \
-v /usr/local/jdk1.8.0_171/jre/lib/fonts:/opt/jdk1.8.0_162/jre/lib/fonts \
-v /etc/timezone:/etc/timezone \
--name ehu-life \
$Life
}
ehu_life_cms() {
docker rm -f ehu-life-cms
docker run -dit \
-p 8887:8080 \
-e "SPRING_PROFILES_ACTIVE=pro" \
-e "SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE-URL=http://xx.xx.xx.xx:8887" \
-v /usr/local/jdk1.8.0_171/:/data/jdk1.8.0_171 \
-v /opt/appdata:/opt/appdata \
-v /opt/logs/cms/life:/opt/logs/cms/life \
-v /img_process:/img_process \
-v /etc/localtime:/etc/localtime \
--name ehu-life-cms \
$Cms
}
ehu_life_cms_119() {
docker rm -f ehu-life-cms-pro
docker run -dit \
-p 8889:8080 \
-e "SPRING_PROFILES_ACTIVE=pro" \
-e "SPRING_BOOT_ADMIN_CLIENT_INSTANCE_SERVICE-URL=http://xx.xx.xx.xx:8889" \
-v /usr/local/jdk1.8.0_171/:/data/jdk1.8.0_171 \
-v /opt/appdata:/opt/appdata \
-v /opt/logs/cms/life:/opt/logs/cms/life \
-v /img_process:/img_process \
-v /etc/localtime:/etc/localtime \
--name ehu-life-cms-pro \
$Cms119
}
ehu_job() {
docker rm -f ehu-job
docker run -dit \
-p 8080:8080 \
-v /opt/logs/ehu-job:/opt/logs/ehu-job \
-v /data/nfs/fonts:/opt/jdk1.8.0_162/jre/lib/fonts \
-v /etc/timezone:/etc/timezone \
-e "SPRING_PROFILES_ACTIVE=pro" \
--name ehu-job \
$Job
}
ehu_commons() {
docker rm -f ehu-commons
docker run -dit \
-p 8089:8080 \
-v /data/jdk1.8.0_171:/data/jdk1.8.0_171 \
-v /opt/appdata:/opt/appdata \
-v /opt/appLog:/opt/appLog \
--name ehu-commons \
$Commons /root/scripts/ehu-commons.sh pro
}
clear
echo ">>>>>>>>>>>>>>>> 线上业务版本回退工具 <<<<<<<<<<<<<<<<"
cat << EOF
************************************************************
* 说明: *
* 1、回退版本:回退上个版本; *
* 2、回退失败:是因为没找到有上个版本的镜像; *
************************************************************
EOF
echo "此服务器可回退应用列表:"
PS3='请输入功能编号来选择您要回退的应用>>> '
# case列表写所有应用,select对外展示可回退应用即可
select choice in {"ehu-life","ehu-life-cms","ehu-job","ehu-life-cms-pro","退出"}
do
case $choice in
"ehu-life") # 48、55、131
ehu_life
IF
;;
"ehu-life-cms") # 55
ehu_life_cms
IF
;;
"life-cms-pro") # 119
ehu_life_cms_119
;;
"ehu-job") # 20
ehu_job
IF
;;
"ehu-commons") # 20
ehu_commons
IF
;;
"退出")
exit
esac
done