• jenkins:一键回滚站点集群


           最近在学习jenkins过程中整理了大量资料,都收录在《jenkins自动化工具使用教程》,但依然缺少一些具体实现细节。

           这篇文章,介绍jenkins做集群回滚时的两个设计方案,让一键回滚到指定时间的历史版本操作更加容易。

     

    1. 集群回滚效果图

    image

    如上图就是0102服务器上的market站点的集群回滚

     

    2. 两个实现方案

    关键点是jenkins生成的包含时间信息的备份目录名要一致。比如:

    D:BackUpDemo2019_01Web.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 ollback_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 Demo2019_01Web.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%
    ollback_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相关问题

  • 相关阅读:
    最新版Butterknife plugin支持butterknife7.0.1和兼容butterknife 6.1.0及下面
    Cocos2D中Action的进阶使用技巧(一)
    开源库Fab-Transformation简单使用解析
    tip of Firefox extention foxyproxy
    jQuery树形菜单,使用zTree插件,异步载入 & 编辑功能&Check 共存
    创建数据库以及其属性的sql语句
    Node.js开发入门—使用AngularJS
    自己动手写shell命令之ls
    剑指 | 7-利用两个栈构建一个队列
    css3使用transform属性制作js弹性运动
  • 原文地址:https://www.cnblogs.com/heyuquan/p/jenkins-onekey-rollback.html
Copyright © 2020-2023  润新知