【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 # 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_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