Jenkins部署與備份恢復實戰

一、關於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 [email protected] 此時/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 [email protected] 無密碼登錄上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故障導致業務無法部署上線啦,這是我這邊找的解決方案,是實踐中整理筆記 ,讀者們要是有更好的方法,煩請留言告知下,同時也可以對本文的錯誤遺漏之處做指正,謝謝~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章