• 【Jenkins】备份恢复方案实践


    Jenkins备份恢复实施方案

    通过Jenkins第三方插件ThinBackup进行,在原有的Jenkins上通过该插件来定时备份数据和插件,再到备份主机上开启定时任务执行脚本去拉取备份数据,利用插件来选择备份数据来进行恢复,重启系统后方可正常使用。

    Jenkins备份

    Jenkins 有一个备份插件,它可以用来与Jenkins备份重要的配置设置。按照下面给出有一个适当的备份所需的步骤。

    1、 管理员登陆172.20.15.36:8080,点击“系统管理”,然后选择“插件管理”选项

     

    2、在可用Available选项卡上,搜索并勾选“ThinBackup”。点击“Install without Restart”。完成后,重新启动Jenkins实例

     

    3、进入系统管理->ThinBackup→Settings下进行相关参数配置,配置说明如下:

     

    备份目录

    指定备份目录。Jenkins进程需要对此目录的写访问权。您可以使用$ {JENKINS_WORKSPACE}等环境变量来指定路径。

    完整备份的备份计划

    指定触发完整备份的计划。使用Cron表示法。即使没有更改,完整备份也会备份所有文件。

    差异备份的备份计划

    指定触发差异备份的计划。使用Cron表示法。差异备份仅存储自上次完全备份以来修改的数据。如果未检测到任何更改,则不会创建差异备份。

    注意:如果只需要完整备份,则无需指定差异备份计划。由于差异备份依赖于完整备份,因此如果指定差异备份计划,则必须提供完整备份计划。

    等到Jenkins / Hudson闲置以执行备份

    建议启用此选项(默认)。然而,许多用户报告说安静模式阻止了长时间运行的作业的执行。如果禁用此选项,则无需等待实例的安全状态即可进行备份。换句话说,备份将立即完成,这可能导致损坏的备份。

    在指定的分钟后强制Jenkins进入完全模式

    在指定的时间(分钟)后强制安静模式,以强制安全的备份环境。零表示在调度程序触发备份时直接强制执行完全模式。阅读下面有关备份过程的更多信息。

    最大备份集数

    要节省磁盘空间,可以指定存储的最大备份集数。备份集定义为完整备份及其引用差异备份。在下一次完整备份操作后,将删除较旧的备份集。这也适用于压缩备份集。

    备份中排除的文件

    如果您有特定文件而不想备份,则在此处输入标识这些文件的正则表达式将阻止它们被备份。名称与此正则表达式匹配的所有文件都不会被备份。如果不需要,请留空。如果表达式无效,则将忽略该表达式。

    备份构建结果

    如果启用此选项,则还将备份构建结果。这可能是很多数据,所以要仔细考虑它。一旦您决定备份构建结果,您还可以选择备份构建存档。再次注意这个选项,因为它可能非常耗时并且可能需要大量的磁盘空间!

    备份'userContents'

    Jenkins提供了一个URL,您可以在其中放置常用数据(例如静态HTML,工具......)。如果选中此选项,则可以备份所有这些数据。

    备份仅构建标记为保留

    如果启用此选项,则仅备份标记为“永久保留此构建”的构建的结果/工件。

    清理差异备份

    如果启用此选项,则只要完成新的完整备份,就会删除所有差异备份。

    将旧备份移动到ZIP文件

    如果选中此选项,则每当执行新的完整备份时,所有旧备份集都将移动到ZIP文件。每个ZIP文件将包含一个备份集,即一个完整备份和引用它的任何差异备份。文件名将标识包含备份的时间范围(即完整备份的时间戳和最新差异备份的时间戳)。

    注意: “ 最大备份集数”设置也适用于由thinBackup创建的备份ZIP文件。

    注意:如果选中“ 清理差异备份 ”,则在完成压缩之前将执行diff清理,因此ZIP文件中不会进行差异备份。

    以上配置表示每天凌晨12点自动完整备份到设置的目录/Trendy/jenkins_backup下
    备份内容包括:Backup next build number file、Backup ‘userContent’folder、
    Backup plugins archives、 Clean up differential backups;

    此外可以手工执行备份

    点击“Backup Now”,此时页面等待备份响应,实际上jenkins在后台运行备份程序,可以通过备份目录中查看,已经生成备份目录类似“FULL-2018-12-25_00_00”

    通过备份进行恢复Jenkins

    一、Jenkins恢复环境部署

    假设现有的Jenkins已经损坏不能正常使用;需要通过最近的完整备份恢复Jenkins服务;

    1、首先在备份主机上部署与原主机上相同版本的Jenkins(按照原主机方式安装)

    2、备份主机开启定时任务去执行脚本从原主机上拉取完整备份

    3、在备份主机Jenkins上利用ThinBackup插件选择最近的备份数据进行恢复

    4、重启备份主机上Jenkins服务,正常使用系统

    二、备份主机配置(拉取原主机备份文件)

    1、拉取备份代码脚本

    172.50.10.16主机/home/jenkins/jenkins_backup.sh(root用户权限赋予777权限)

    #!/bin/bash

    backup_path=/home/jenkins/master_backup/

    backup_file_filter=*"`date +%Y-%m-%d`"*

    jenkins_home_directory=/Trendy/jenkins_backup/

    jenkins_server_ipaddress=172.20.15.36

    jenkins_server_ssh_username=root

    ssh_host="root@172.20.15.36"

    # which files and directory backup

    for i in `ssh $ssh_host find /Trendy/jenkins_backup/ -name ${backup_file_filter}`

    do

        backup_files[j]=$i

        j=`expr $j + 1`

    done

    echo ${backup_files[0]}

    echo ${backup_file_filter}

    backup_files_num=${#backup_files[@]}

    # do backup files copy

    for (( i = 0; i < $backup_files_num; i++ )); do

       scp -r $jenkins_server_ssh_username@$jenkins_server_ipaddress:${backup_files[i]}  $backup_path

    done

    2、SSH免密登陆配置

    脚本中需要172.50.10.16远程登陆172.20.15.36,实际连接的时候会让你输入密码,但执行脚本的时候无法干预,就需要设置SSH免密登陆。

    • 172.50.10.16机器执行ssh-keygen -t rsa一路回车后生成公钥id_rsa.pub
    • 172.20.15.36上将16主机的公钥添加到/root/.ssh/authorized_keys

             

    3、172.50.10.16上开启定时任务去执行脚本拉取备份文件

    crontab -e添加00 01 * * * /home/jenkins/jenkins_backup.sh(表示1点自动执行脚本)

    三、配置ThinBackup并恢复

    1、登陆172.50.10.16:8080备份主机,进入系统管理->ThinBackup页面,进行thinnBackup Configuration配置,配置Backup directory为主机获取存放备份文件路径

     

    2、返回ThinBackup, 点击Restore,如图钩选上
    Restore next build number file(build文件)
    Restore plugins(还原插件)
    点击Restore 同样需要等待一段时间;可以查看/var/lib/jenkins目录的变化;

    3、重启备份主机Jenkins服务,查看系统恢复数据,项目、用户、插件等信息都恢复存在

    测试Jenkins使用

    选择某个工程进行build,会需要重新配置凭证,修改脚本中鉴权ID等(遇到问题按照主机上操作修改相关配置,基本都是环境更改后鉴权和工具安装问题)

    优化自动删除15天前的备份文件

    在原主机和备份主机上每天都会保存配置文件和备份文件,长时间运行会导致空间占用过大,所以添加在两台主机上分别添加脚本AutoClean_backup.sh去删除15天之前的备份文件,该脚本每个月15号通过定时任务执行去清理

     
    #!/bin/sh
    BAK_HOME="/Trendy/jenkins_backup"
    
    keepNum=13
    fileNum=$(find ${BAK_HOME} -mtime +1 -name "FULL*" | wc -l)
    
    echo "${fileNum}"
    
    for file in $(find ${BAK_HOME} -mtime +1 -name "FULL*"); do
    if test $[fileNum] -gt $[keepNum];then
    rm -rf ${file}
    fileNum=${fileNum}-1
    echo "delete backup file"
    else
    echo "do no thing"
    fi
    done
  • 相关阅读:
    Java操作excel,读取及导出
    vue 在package.json配置对外暴露访问地址(手机端访问本地项目地址)
    element UI upload组件上传附件格式限制
    linux之vim/vi快速复制多行内容的快捷键
    使用vant的Toast组件时提示not defined
    如何使用js判断当前页面是pc还是移动端打开的
    JavaScript 保留两位小数函数
    Linux其他命令
    linux学习ls的三个选项 lha的作用和隐藏文件的知识
    vue+ element-ui el-table组件自定义合计(summary-method)坑
  • 原文地址:https://www.cnblogs.com/Lina-zhu/p/12735082.html
Copyright © 2020-2023  润新知