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命令:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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相关问题
作者:滴答的雨
出处:http://www.cnblogs.com/heyuquan/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎园友讨论下自己的见解,及向我推荐更好的资料。
本文如对您有帮助,还请多帮 【推荐】 下此文。
谢谢!!! (*^_^*)
技术群:(339322839广西IT技术交流),欢迎你的加入
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2013-01-16 (译)构建Async同步基元,Part 6 AsyncLock
2013-01-16 (译)构建Async同步基元,Part 5 AsyncSemaphore