专业编程基础技术教程

网站首页 > 基础教程 正文

持续集成部署神器:Jenkins2.0之备份恢复

ccvgpt 2024-08-04 12:21:46 基础教程 11 ℃

谈到备份跟恢复那么我们就要先看看jenkins的数据存储结构,了解一下我们需要备份什么?

Jenkins的数据存储结构

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

持续集成部署神器:Jenkins2.0之备份恢复

典型的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 用户缓存信息,最好备份

目前官方提供了几个插件,可以实现简单的数据备份

下面是地址连接:

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 home下使用 类似 git pull 等命令,谨记Jenkins home下数据是第一最新数据,代码仓库只是备份数据。每次备份,代码仓库会生成一个新的commit版本,周期取决于备份job或者cron的设置周期。

Tags:

最近发表
标签列表