最近在学习 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
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
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%
- 2)
第二步: 回滚时, 从 rollback_history.txt 文件读取要回滚的时间节点
Jenkins 安装插件: Extended Choice Parameter
插件使用参考: jenkins - 参数化构建 (二) 插件: Extended Choice Parameter
给 job 添加构建参数
这样就完成了备份历史读取工作, 效果图如下
============================
over, 希望本文介绍的回滚方案对你有帮助.
来源: https://www.cnblogs.com/heyuquan/p/jenkins-onekey-rollback.html