天天看点

Jenkins 系列: (五) Jenkins 数据备份与恢复Jenkins的数据存储结构使用插件备份使用Rsync异地备份使用版本控制工具进行备份

有好多同学培训后咨询Jenkins的数据备份问题,今天就把Jenkins的常用的数据备份方法给大家总结一下。

Jenkins的数据存储结构

进行有效的Jenkins数据备份,首先要理解Jenkins的数据存储结构,然后根据业务场景选择合适的粒度进行备份。

典型的jenkins实例包含以下文件和目录:

*.xml                 需要备份
config-history        需要备份
fingerprints          需要备份
global-build-stats    需要备份
*.key*                需要备份
jobs                  jobs配置需要备份(config.xml, nextBuildNumber), builds目录(build logs等)根据需求而定
logs                  插件logs,根据需求而定,可以不备份
monitoring            可以不备份,插件会实时生成监控数据
nodes                 需要备份
plugins               需要备份 *.jpi及 *.hpi,可以不备份每个插件子目录,jenkins启动后会更新插件子目录
secrets               需要备份
updates               需要备份
userContent           用户上传内容,可以根据需要备份
users                 用户缓存信息,最好备份
           

使用插件备份

Jenkins 有好几个插件供用户使用,可以实现简单的备份

https://wiki.jenkins.io/display/JENKINS/Backup+Plugin

https://wiki.jenkins.io/display/JENKINS/PeriodicBackup+Plugin

https://wiki.jenkins.io/display/JENKINS/thinBackup

这些插件的基本原理是备份特定的配置信息,归档存储到master,同时提供restore的功能。

潜在问题: 数据归档在master,单点问题依然存在。如果master宕机了,备份数据无法获得,也就失去了意义了。

使用Rsync异地备份

为了避免master单点故障,可以将数据备份到远程备份机器。可以使用rsync工具同步Jenkins home到远程,可以利用rsync工具的 “--exclude-from=FILE”功能,定制一个exclude文件,过滤掉无需备份的数据。

潜在问题: 这种方法解决了单点备份的问题,但是需要权衡全量备份和增量备份的问题。如果每次同步到远端一个新的目录,每次同步将是一个全量备份,数据同步量大,速度慢;如果每次同步到相同的远端目录,将是增量备份,数据同步量少,速度快。每次全量备份,在牺牲网路带宽和远端存储等资源下,备份会有多个版本;而每次增量备份,远端备份和最新数据同步后,只保留最新版本。

全量还是增量,多版本还是最新版本等,用户需要去权衡。

使用版本控制工具进行备份

如果把Jenkins home看成代码的话,我们可以使用版本控制的方法备份到代码仓库。一般情况下,公司的代码仓库安全性比较高。

这种方法基于版本控制仓库的备份方法,通过版本控制工具将备份服务器需要的配置增量备份到版本仓库中。

把Jenkins配置备份到版本控制仓库,有两大好处:

1. 增量备份,避免了归档备份等冗余备份对CPU,Disk等的浪费

2. 理论上可以恢复到所有历史版本,取决于备份周期

比如使用Gitlab作为备份仓库,基本步骤:

1. 创建gitlab repo用作Jenkins home 备份远程repo

2. 设置gitlab repo权限,确保Jenkins account可以 push code等

3. 将Jenkins home 初始化为本地repo

4. 添加 .gitignore 文件

5. 将Jenkins home 本地仓库内容push到远程repo中,创建master分支

6. 创建Jenkins job或者Crontab 实现定时周期性备份

Jenkins 系列: (五) Jenkins 数据备份与恢复Jenkins的数据存储结构使用插件备份使用Rsync异地备份使用版本控制工具进行备份

潜在问题: 不要手动在Jenkins home下使用 类似 git pull 等命令,谨记Jenkins home下数据是第一最新数据,代码仓库只是备份数据。每次备份,代码仓库会生成一个新的commit版本,周期取决于备份job或者cron的设置周期。

继续阅读