栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

jenkins自动部署版本回滚(docker,active choices plug-in,war包备份)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jenkins自动部署版本回滚(docker,active choices plug-in,war包备份)

        利用jenkins的参数化构建+shell脚本的方式,保留最近5份的war包备份,进行jenkins的版本回退操作,必须安装jenkins的管理插件(Active Choices Plug-in),在rollback时,动态显示最近版本信息。

本流程中的目录及路径说明

        war包备份目录:/app/version_backup
        docker镜像打包目录: /app/dockerfile

deploy发布的思路:

  •         每次发布的时候填写version(变量$version)版本(可以自增加,也可以让用户自己填,我们是填日期)
  •         如果用户选择deploy
  •         先判断备份的$version目录是否存在
  •         如果/app/version_backup/$version备份目录已经存在,则退出运行。
  •         如果/app/version_backup/$version备份目录不存在,则创建目录。
  •         把war包拷贝到此目录备份,然后再把war包拷贝到/app/dockerfile下,制作新的镜像。

rollback回退的思路:

  •         如果是Rollback,用户选择对应的回退版本(通过active choice plug-in动态显示)
  •         先判断备份目录下的$RollbackVersion是否存在
  •         如果/app/version_backup/$RollbackVersion目录不存在,则退出运行。
  •         如果/app/version_backup/$RollbackVersion目录存在,则继续下一步。
  •         把war包从/app/version_backup/$RollbackVersion拷贝到/app/dockerfile下,制作新的镜像。

1.active choice plug-in的配置

1)指定参数status,用户可以选择Deploy或者Rollback。

2)这里选字符参数,指定参数Version,只有在用户发布时使用,用户可以自己填版本号,或者让版本号自增加也可以(从0开始)。

 

 3)选择active choices reactive parameter,指定参数RollbackVersion,回退时使用,填写groovy script脚本,动态显示备份目录/app/version_backup下面的文件列表。

重点关注:Refrenced parameters一定要填!!!!。

其中groovy script的脚本内容如下:

path="/app/version_backup"
tags=['bash','-c',"ls -t1 ${path}"].execute().text.readLines()
 
if (Status.equals("Rollback")) {
  return tags
} 

2. 源码管理(git,按照自己的实际情况填)

 3.触发器及pre steps设置

4.添加post steps(本地shell脚本执行),实现deploy或者rollback的备份、打包镜像、上传私有仓库的操作。

shell脚本如下(具体可以看#的说明):

#!/bin/bash
path=/app/version_backup/$Version
roll_path=/app/version_backup/$RollbackVersion
docker_build_path=/app/dockerfile
case $Status in
	Deploy)
	echo "Status:$Status"
		if [ -d $path ];
			then 
				echo "此发布版本已存在,请重新输入发布版本"
			else
				mkdir -p $path
				echo "备份文件夹已建"
				cp $WORKSPACE/target/bbs-5.7.war $path/
				echo "war包已备份至对应的version目录"
				rm -rf $docker_build_path/bbs-5.7.war && cp $WORKSPACE/target/bbs-5.7.war $docker_build_path
				echo "war包已复制到docker build目录"
				docker rmi 192.168.1.145:5000/cuanon-tomcat:VW
				echo "镜像已删除完成"
				cd $docker_build_path && docker build -t 192.168.1.145:5000/cuanon-tomcat:VW .
				echo "打包镜像完成"
				docker push 192.168.1.145:5000/cuanon-tomcat:VW
				echo "推送私有仓库完成"
		fi
	;;
	Rollback)
    echo "Status:$Status"
		if [ -d $roll_path ];
			then
				echo "有此版本$RollbackVersion的备份,将进行回退"
				rm -rf $docker_build_path/bbs-5.7.war && cp $roll_path/bbs-5.7.war $docker_build_path
				echo "war包$RollbackVersion已复制到docker build目录"
				docker rmi 192.168.1.145:5000/cuanon-tomcat:VW
				echo "删除现有镜像"
				cd $docker_build_path && docker build -t 192.168.1.145:5000/cuanon-tomcat:VW .
				echo "打包镜像完成"
				docker push 192.168.1.145:5000/cuanon-tomcat:VW
				echo "推送私有仓库完成"
			else
				echo "无此版本的回退,请重新输入回退版本"
		fi	
	;;
esac

5.添加post steps(本地shell脚本执行) ,实现备份文件的删除(最大5份)

shell脚本如下:

#!/bin/bash
echo "开始删除超过5天的旧文件"
backup_path=/app/version_backup/
backup_copies=5
FILENUM=`ls -lrt /app/version_backup/ | grep ^d | wc -l`
while [ $FILENUM -gt $backup_copies ]
do
        OLDEST_File=`ls -lrt $backup_path| grep ^d |awk '{print $9}' | head -1`
        echo "最旧的文件夹: $OLDEST_File"
        rm -rf /app/version_backup/$OLDEST_File
        echo "文件夹: $OLDEST_File已删除"
        let FILENUM--
done

 6.继续添加post steps(远程执行shell脚本)远程应用服务器进行docker镜像的下载并运行。

shell脚本如下:

#远端容器执行
docker rm -f cuanon-bbs-vw  &&
echo "删除容器完成"
docker rmi 192.168.1.145:5000/cuanon-tomcat:VW  &&
echo "删除image完成"
docker pull 192.168.1.145:5000/cuanon-tomcat:VW  &&
echo "下载image完成"
docker run -d -p 1111:8080 --name cuanon-bbs-vw 192.168.1.145:5000/cuanon-tomcat:VW
echo "启动容器完成"

以上配置完成后,将实现如下功能。

  • 如果用户选择Deploy,则可以自己写version编号,也可以让jenkins自增。

 如果用户选择Rollback,则可以选择对应的RollbackVersion版本。

配置完后直接运行,正常是没什么问题。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/887075.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号