jenkins:一键回滚站点集群
最近在学习jenkins过程中整理了大量资料,都收录在《jenkins自动化工具使用教程》,但依然缺少一些具体实现细节。
这篇文章,介绍jenkins做集群回滚时的两个设计方案,让一键回滚到指定时间的历史版本操作更加容易。
1. 集群回滚效果图
如上图就是01和02服务器上的market站点的集群回滚
2. 两个实现方案
关键点是jenkins生成的包含时间信息的备份目录名要一致。比如:
D:\BackUp\Demo\2019_01\Web.Demo_13_1350
即:**\年_月\项目名_日_时分
发布流程简化设计如下

方案一:在分发中心进行备份,这样不存在备份目录名不一致的问题
方案二:在目的机器进行备份:在分发中心生成时间信息,分发时将时间信息传入目的机器,目的机器使用同一个时间信息生成备份目录名
(推荐方案二:直接在目的机器进行备份。因为分发中心不一定包含站点所有文件,有的特殊文件可能是手工直接拷贝到目的机器站点目录的)
3. 方案一实现
Jenkins实现生产环境部署文件的回滚操作(Windows)
https://www.cnblogs.com/EasonJim/p/5945266.html
安装Build with Parameters的插件,job中添加 Run Parameter 参数,用于关联现有项目,下拉框展示关联job参数

4. 方案二实现
分两步实现
1) 第一步:发布时,在同一个上级节点生成时间信息
时间信息存入文件:**\Web.Demo\rollback_history.txt
内容为:
$last$=Web.Demo_2019_0113_1531
$key$=Web.Demo_2019_0113_1531,Web.Demo_2019_0113_1404,Web.Demo_2019_0113_1350
说明:
$last$ 记录的是最后一次发布时间
$key$ 记录的是所有历史发布时间,用逗号分隔
设计备份目录名:
Eg:web.demo站点的备份目录如下
D:\BackUp\ Demo\2019_01\Web.Demo_13_1348
windows bat命令:
echo =============截取时间===============
:: 时间为 2018_1101_1012
:: 目录名 **\2018_11\
set current_year_month=%date:~0,4%_%date:~5,2%
:: 把年月日串中的空格替换为0
set current_year_month=%current_year_month: =0% :: 站点目录名 **\2018_11\**_01_1012
set current_day_time=%date:~8,2%_%time:~0,2%%time:~3,2%
::把时间串中的空格替换为0 否则hh中是单数的时候,取到的数为" 9"(多一个空格)替换后为"09"
set current_day_time=%current_day_time: =0%
echo =============组合备份目录=================
set site_backup_dir_name=%project_dir_name%_%md_current_year_month%%md_current_day_time% set backup_history_file=%backup_history_path%\rollback_history.txt
set temp_backup_history_file_name=%project_dir_name%_backup_temp.txt echo ========= do backup history txt ==========
if not exist %backup_history_path% (
md "%backup_history_path%"
) @echo off
setlocal enabledelayedexpansion
if not exist %backup_history_file% (
(
echo $last$=
echo $key$=
)>%temp_backup_history_file_name%
move /y %temp_backup_history_file_name% %backup_history_file%
) (for /f "delims=" %%i in (%backup_history_file%) do (
set s=%%i
if "!s:~0,6!" equ "$last$" (
for /f "tokens=1* delims==" %%j in ('echo !s!') do (
set n=%site_backup_dir_name%
echo %%j=!n!
)wn /l ) else if "!s:~0,5!" equ "$key$" (
for /f "tokens=1* delims==" %%j in ('echo !s!') do (
set n=%site_backup_dir_name%,%%k
echo %%j=!n!
)
) else (echo !s!)
)
)>%temp_backup_history_file_name%
move /y %temp_backup_history_file_name% %backup_history_file%
powershell命令
PowerShell中使用Get-Date获取日期时间并格式化输出的例子
Get-Date -Format 'yyyy-MMdd-HHmmss'

2) 第二步:回滚时,从rollback_history.txt文件读取要回滚的时间节点
Jenkins安装插件:Extended Choice Parameter
插件使用参考:jenkins-参数化构建(二)插件:Extended Choice Parameter
给job添加构建参数,然后将 rollback_history.txt 中记录的参数值设置上去


这样就完成了备份历史读取工作,效果图如下

回滚job根据选择的时间版本参数,从新组合备份目录,进行站点还原
============================
over,希望本文介绍的回滚方案对你有帮助。欢迎留下你的见解和讨论jenkins相关问题
jenkins:一键回滚站点集群的更多相关文章
- 自动化部署-Jenkins备份回滚
1.备份 备份可以使用批处理命令解决,实际就是复制当前发布文件 ::备份文件夹名,使用当前时间 set foldername=%date:~0,4%%date:~5,2%%date:~8,2%%tim ...
- jenkins自动化回滚阿里云k8s应用版本
jenkins 服务器需先保留着原先构建的不同版本的应用镜像 [root@jenkins sh]# docker images|grep "maintain" registry-v ...
- Jenkins发布回滚方案
Jenkins回滚可以通过每次发布从主干打tag,然后发布的时候发tag,比如tag, v1, v2,v3 如果我发布了v3,想要回滚回v2,直接在Jenkins中选择v2的tag地址重新构建就可以回 ...
- shell自动化一键部署脚本,秒级一键回滚脚本
#!/bin/bash # Node List PRE_LIST="192.168.222.163" # 预生产环境节点 GROUP1_LIST= ROLLBACK_LIST=&q ...
- Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)
转载:http://www.cnblogs.com/EasonJim/p/6295372.html Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践) 前提: 这一篇是继上一 ...
- 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...
- jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...
- 2、jenkins+svn自动发布和回滚
Jenkins配置回滚思路: 目前只能实现使用salt来管控配置文件的管控,配置文件的版本回滚需要后续定制化开发,或者进行格外其他的管理操作.后续实现 以下配置可以为每个项目备份构建文件到本地指定路径 ...
- Jenkins 搭建企业实战案例 (发布与回滚)
让我们的代码部署变得easy,不再难,Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.Jenkins非常易于安装和配置,简单易用 ...
随机推荐
- fiddler限制网速
在测试过程中,经常会要求测试弱网络情况时的一些特殊情况,这时候IOS还好说,在开发者选项中调整网络模式即可,但android就只能通过别的方式了,这里整理了通过fiddler抓包工具来设置弱网模式,在 ...
- python读取uti-8格式ini配置文件出现UnicodeDecodeError: 'gbk' codec can't decode byte 0xba in position 367: illegal multibyte sequence错误解决方法
出现这种错误只需要在read下添加encoding='utf-8' 如: from configparser import ConfigParser cf = ConfigParser() cf.re ...
- IDEA创建完整目录maven项目
鉴于第三次利用idea建立完整目录maven项目时仍要反反复复地问度娘,特此记录 1.第一步,进行project-> 勾选Create from archetype,搜索maven.archet ...
- 敏捷开发相关编辑思想(SOA、DDD、REST、CQRS)
这是第一次写有关编程思想的东西. 1.理解Martin Fowler提出的SOA(面向服务歧义) 2.理解DDD(Domain-Driven Design领域驱动设计): http://blog.cs ...
- MySQL高可用之MHA的搭建
MySQL MHA架构介绍: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Face ...
- C++智能指针剖析(下)boost::shared_ptr&其他
1. boost::shared_ptr 前面我已经讲解了两个比较简单的智能指针,它们都有各自的优缺点.由于 boost::scoped_ptr 独享所有权,当我们真真需要复制智能指针时,需求便满足不 ...
- MySQL-连表查询联系
链接 1.将老师的姓名和所教课程罗列出来 SELECT teacher_id,tname,cname FROM course LEFT JOIN teacher ON course.`teacher_ ...
- 2018年最新JAVA面试题总结之JavaWeb(2)
转自于:https://zhuanlan.zhihu.com/p/39522575 1.tomcat的优化方式?回答:Tomcat的优化我准备从三方面来说: 第一部分: 内存优化Tomcat的默认内存 ...
- OpenCV-Python:模板匹配
啥叫模板匹配 模板匹配就是在大图中找小图,也就说在一幅图像中寻找另一幅模板图像的位置: OpenCV使用 cv2.matchTemplate() 实现模板匹配. import cv2 import n ...
- 检查linux版本命令
lsb_release -a cat /etc/issue cat /proc/version uname -a cat /etc/redhat-release

