Osheep

时光不回头,当下最重要。

基于 Docker 的 Spring Boot 应用自动升级、自动回滚脚本

《基于 Docker 的 Spring Boot 应用自动升级、自动回滚脚本》

天涯一角

为什么不用 CI,而要写脚本?

单个或几个应用的管理去搭建 CI 平台的话,成本高,而且不能带来显著的优势。

自动升级脚本 run.sh

#!/bin/bash

# description 自动升级脚本
# version 1.0

#0、从 git 上拉最新的代码
git pull

#1、使用 Maven 打包最新的代码
mvn clean package

#2、将老镜像 TAG 设置为 old
docker tag spring spring:old

#3、构建新镜像
docker build -t spring .

#4、移除正在运行的 【spring】 容器
docker rm -f spring

#5、删除 <none> 镜像
docker images|grep none|awk '{print $3 }'|xargs docker rmi

#6、启动【spring】容器
docker run -d -v /root/logs:/data/logs --link redis:redis --link mariadb:mariadb -p 80:80 --name spring spring

#7、休息 3 秒
sleep 3

#8、打印最新的日志
tail -f /root/logs/info.log

简单说明:

  • 镜像名 和 容器名 都为 spring
  • 升级后的镜像 spring:latest, 升级前的镜像 spring:old
  • /data/logs 是 spring boot 应用写日志文件的路径

自动回滚脚本 back.sh

#!/bin/bash

# description 自动回滚脚本
# version 1.0

#0、将老镜像 TAG 为新镜像
docker tag spring:old spring

#1、移除正在运行的 【spring】 容器
docker rm -f spring

#2、删除<none>镜像
docker images|grep none|awk '{print $3 }'|xargs docker rmi

#3、启动【spring】容器
docker run -d -v /root/logs:/data/logs --link redis:redis --link mariadb:mariadb -p 80:80 --name spring spring

#4、休息 3 秒
sleep 3

#5、打印最新的日志
tail -f /root/logs/info.log

简单说明:

  • 只能回滚到上一个版本,不能回滚到上上个版本
点赞