运维线上业务版本自动回退脚本

 

 

运维线上业务版本自动回退脚本

针对线上业务出现问题或Bug,导致业务不稳定等情况,需要紧急回退上个或上上个版本,写了个自动回退脚本

业务环境:Docker

回退效果

回退失败情况:检测不到上个版本的镜像,也就是只有一个镜像的时候,会回退失败

image-20220810183452638

# 回退成功
[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
posted @ 2022-08-10 18:37  秋风お亦冷  阅读(135)  评论(0编辑  收藏  举报