一、关于Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能!
先了解下相关概念:
CI: continuous integration持续集成 (code -- bulid -- integrate --test)
CD: continuous Delivery 持续交付 ( test -- release)
continuous Deployment 持续部署

简单来说就是通过Jenkins及相关的插件,可以让企业代码构建--发布--测试--上线整个流程变得自动化,持续集成;
接下来我们就从jenkins的安装部署到日常的简单使用,以及jenkins的备份与恢复做一个简单的了解!

二、Jenkins安装

此次实战来源于线上对jenkins的灾备,即现有的jenkins环境不可用时,要有一个马上能替代的jenkins环境,保障持续集成部署上线业务不中断;因此需要另外部署安装一套Jenkins系统,在现有Jenkins系统不可用时,能顶上,当然这其中最关键的是在于现有jenkins中的各种view,job等数据怎么在新的jenkins上同步过来?

思路:在现有jenkins上通过插件ThinBackup来(定时完整)备份jenkins上的数据;通过NFS 共享到备份的jenkins上,备份的jenkins上恢复; 这样基本上能达到有两个可用的jenkins系统,所谓的冷备吧~

此次实战环境:
CentOS7.5
java version: "1.8.0_171"
ip: 10.8.11.228

1、安装

本次使用官方提供的redhat源安装;由于Jenkins基于java开发的,因此需要java环境;

# rpm -ivh jdk-8u171-linux-x64.rpm     # 基本上1.8.x都可以

###下载官方yum仓库
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
## 导入证书
# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

## 安装
# yum install jenkins -y

## 启动jenkins
# systemctl enable jenkins
# systemctl start jenkins

Jenkins安装就是这么简单,jenkins默认侦听在tcp 8080端口上;如果要修改默认侦听端口及其他的配置项;可到下面的文件中修改即可;

#cat /etc/sysconfig/jenkins |grep JENKINS_PORT
JENKINS_PORT="8080"

不过默认配置已经可以直接使用了,无需要修改!

2、防火墙配置

# /etc/sysconfig/iptables 文件中添加以下配置 以开放jenkins服务

-A INPUT -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 8080 -j ACCEPT
-A OUTPUT -p tcp -m state --state ESTABLISHED -m tcp --sport 8080 -j ACCEPT
注:如果jenkins有从节点,请开放到从节点的端口通常最方便的做法是开放ip或段的白名单
-A INPUT -s 10.8.0.0/16 -m state --state NEW,ESTABLISHED -m comment --comment "Allow 10.8.0.0/16 IN" -j ACCEPT
-A OUTPUT -d 10.8.0.0/16 -m state --state NEW,ESTABLISHED -m comment --comment "Allow 10.8.0.0/16 OUT" -j ACCEPT

3、jenkins初始化配置

浏览器中访问:http://10.8.11.228.8080 如图:

Jenkins部署与备份恢复实战

上图中的Aadministrator password 如下图中所示获取填入:
Jenkins部署与备份恢复实战

接下来就是自动安装推荐插件或手动选择安装插件,可跳过;因为本次安装的主要目的是为了
从已有的jenkins上还原配置;备份中已经有了jenkins插件备份和相关数据的备份;
jenkins初始化就是这么简单,接下就可以配置使用了~ 这里演示的是从已有的jenkins中备份并在这台新的jenkins中还原~

三、Jenkins备份

1、安装ThinBackup

备份jenkins通过第三方插件 ThinBackup 进行
登录已有jenkins进行安装ThinBackup插件:
Jenkins --> 系统管理 --> 插件管理 --> 搜索ThinBackup 下图是已经安装好了
Jenkins部署与备份恢复实战

2、配置ThinBackup

Jenkins --> 系统管理 --> ThinBackup --> Setting -->如图:
Jenkins部署与备份恢复实战

Jenkins部署与备份恢复实战

以上配置表示周一到周五12点1分完整备份到/mnt/jenkins_bak (NFS共享中)
备份内容包括:build results、Backup userContent folder、Backup next build number file
Backup plugins archives(插件)、 Backup additional files、以及把老的备份文件打包压缩
手动执行备份:
Jenkins --> 系统管理 --> ThinBackup --> Backup Now
注意此时页面像是卡住了(等待备份响应),实际上jenkins在后台运行备份程序,可以通过到备份目录中查看
目录大小看到,已经生成了备份目录类似 "FULL-2018-11-06_21-01"
备份完成页面就正常了~

四、通过备份进行恢复Jenkins

1、环境准备

假设现有的jenkins已经损坏不能正常使用;需要通过最近的完整备份恢复jenkins服务;
首先部署jenkins 请参考步骤一;挂载NFS共享目录到本地(因为之前的jenkins自动备份是放在NFS中)
或复制完成备份到新的jenkins主机上;新的jenkins安装第三方备份还原插件ThinBackup;

2、配置ThinBackup并备份

还原操作在10.8.11.228上即上面新安装的jenkins上操作,步骤如下:
先设置备份与还原的配置:
Jenkins --> 系统管理 --> ThinBackup --> Setting -->如图:
Jenkins部署与备份恢复实战

3、还原jenkins:

Jenkins --> 系统管理 --> ThinBackup --> Restore 如图:
Jenkins部署与备份恢复实战

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

4、还原注意项

jenkins还原后可能出现以下插件没有更新情况如图(不影响还原后使用):
Jenkins部署与备份恢复实战

以下显示的有红色提示的表示更新后的新插件版本会影响现有功能使用,需要重新配置才可以;因此需要谨慎更新;
如图:
Jenkins部署与备份恢复实战
没有提示的可以直接到插件中进行更新操作;

还原后会发现所有的从节点变成offine状态不可用;如还原后从节点10.8.11.240状态是offine
点击从节点测试可能出现如下情况:

[06/11/18 10:03:51] [SSH] Opening SSH connection to [AGENT_HOSTNAME]:22.
[06/11/18 10:03:51] [SSH] WARNING: No entry currently exists in the Known Hosts file for this host. Connections will be denied until this new host
and its associated key is added to the Known Hosts file.
Key exchange was not finished, connection is closed.
java.io.IOException: There was a problem while connecting to [AGENT_HOSTNAME]:22

原因是缺少/var/lib/jenkins/.ssh/known_hosts文件(里面是jenins到各从节点的应答指纹信息)
需要在/var/lib/jenkins工作队目录下创建.ssh目录并修改为
jenkins用户和组所有权限700 对所有从节点手动访问一次用来接受ssh应答指纹;
在新的jenkins上 ssh root@10.8.11.240 此时/root/.ssh/known_hosts中有一条如下记录:
Jenkins部署与备份恢复实战

复制/root/.ssh/known_hosts 到/var/lib/jenkins/.ssh/下
权限如下:

-rw------- 1 jenkins jenkins 2.6K 11月 6 18:08 known_hosts

如是从节点是无密码私钥认证请记得把私钥放在/root/.ssh/下叫id_rsa 公钥放到对应从节点的用户下
/root/.ssh/authorized_keys文件中并确保权限为
-rw------- 1 root root1 .2K 12月 12 2017 authorized_keys
ssh -p 65022 root@10.8.11.246 无密码登录上10.8.11.246则表示配置正常;
重复以上操作从新jenkins上登录所有从节点再把known_hosts复制到/var/lib/jenkins/.ssh/下 直到所有从节点
的应答指纹都在存在;

5、以ssh 私钥添加从节点

Jenkins -->系统管理--> 节点管理--> New Node --> Node name -->固定节点 如图:
Jenkins部署与备份恢复实战
Jenkins部署与备份恢复实战
点击 “Credentials” Add 添加jenkins与从节点通讯方式为ssh 私钥 并粘贴私钥文件
如图:
Jenkins部署与备份恢复实战
保存;
再次点击节点测试可以发现 从节点正常啦!

五、测试Jenkins使用

下面以TEST-rsyncV3images job 在恢复过来的jenkins上运行,这是用来把线上图片同步到本地所有测试环境中的job:

以下是以恢复过来的Jenkins上测试执行一个job查看是否部署成功与恢复成功~
Jenkins部署与备份恢复实战
Jenkins部署与备份恢复实战
Jenkins部署与备份恢复实战

到此,jenkins部署配置,以及添加从节点,备份与恢复完成~ 再也不怕jenkins故障导致业务无法部署上线啦,这是我这边找的解决方案,是实践中整理笔记 ,读者们要是有更好的方法,烦请留言告知下,同时也可以对本文的错误遗漏之处做指正,谢谢~