最近在學習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相關問題







