jenkins:一鍵回滾站點集群


       最近在學習jenkins過程中整理了大量資料,都收錄在《jenkins自動化工具使用教程》,但依然缺少一些具體實現細節。

       這篇文章,介紹jenkins做集群回滾時的兩個設計方案,讓一鍵回滾到指定時間的歷史版本操作更加容易。

 

1. 集群回滾效果圖

image

如上圖就是0102服務器上的market站點的集群回滾

 

2. 兩個實現方案

關鍵點是jenkins生成的包含時間信息的備份目錄名要一致。比如:

D:\BackUp\Demo\2019_01\Web.Demo_13_1350

即:**\_\項目名__時分

發布流程簡化設計如下

image

 

方案一:在分發中心進行備份,這樣不存在備份目錄名不一致的問題

方案二:在目的機器進行備份:在分發中心生成時間信息,分發時將時間信息傳入目的機器,目的機器使用同一個時間信息生成備份目錄名 

(推薦方案二:直接在目的機器進行備份。因為分發中心不一定包含站點所有文件,有的特殊文件可能是手工直接拷貝到目的機器站點目錄的)

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$     記錄的是所有歷史發布時間,用逗號分隔

 

設計備份目錄名:

Egweb.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 中記錄的參數值設置上去

 

image

image

 

這樣就完成了備份歷史讀取工作,效果圖如下

image

 

回滾job根據選擇的時間版本參數,從新組合備份目錄,進行站點還原

 

============================

over,希望本文介紹的回滾方案對你有幫助。歡迎留下你的見解和討論jenkins相關問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM