Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能!
先了解下相關概念:
CI: continuous integration持續集成 (code -- bulid -- integrate --test)
CD: continuous Delivery 持續交付 ( test -- release)
continuous Deployment 持續部署java
簡單來講就是經過Jenkins及相關的插件,可讓企業代碼構建--發佈--測試--上線整個流程變得自動化,持續集成;
接下來咱們就從jenkins的安裝部署到平常的簡單使用,以及jenkins的備份與恢復作一個簡單的瞭解!linux
這次實戰來源於線上對jenkins的災備,即現有的jenkins環境不可用時,要有一個立刻能替代的jenkins環境,保障持續集成部署上線業務不中斷;所以須要另外部署安裝一套Jenkins系統,在現有Jenkins系統不可用時,能頂上,固然這其中最關鍵的是在於現有jenkins中的各類view,job等數據怎麼在新的jenkins上同步過來?瀏覽器
思路:在現有jenkins上經過插件ThinBackup來(定時完整)備份jenkins上的數據;經過NFS 共享到備份的jenkins上,備份的jenkins上恢復; 這樣基本上能達到有兩個可用的jenkins系統,所謂的冷備吧~ssh
這次實戰環境:
CentOS7.5
java version: "1.8.0_171"
ip: 10.8.11.228tcp
本次使用官方提供的redhat源安裝;因爲Jenkins基於java開發的,所以須要java環境;ide
# 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"
不過默認配置已經能夠直接使用了,無須要修改!測試
# /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
瀏覽器中訪問:http://10.8.11.228.8080 如圖:ui
上圖中的Aadministrator password 以下圖中所示獲取填入:this
接下來就是自動安裝推薦插件或手動選擇安裝插件,可跳過;由於本次安裝的主要目的是爲了
從已有的jenkins上還原配置;備份中已經有了jenkins插件備份和相關數據的備份;
jenkins初始化就是這麼簡單,接下就能夠配置使用了~ 這裏演示的是從已有的jenkins中備份並在這臺新的jenkins中還原~
備份jenkins經過第三方插件 ThinBackup 進行
登陸已有jenkins進行安裝ThinBackup插件:
Jenkins --> 系統管理 --> 插件管理 --> 搜索ThinBackup 下圖是已經安裝好了
Jenkins --> 系統管理 --> ThinBackup --> Setting -->如圖:
以上配置表示週一到週五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已經損壞不能正常使用;須要經過最近的完整備份恢復jenkins服務;
首先部署jenkins 請參考步驟一;掛載NFS共享目錄到本地(由於以前的jenkins自動備份是放在NFS中)
或複製完成備份到新的jenkins主機上;新的jenkins安裝第三方備份還原插件ThinBackup;
還原操做在10.8.11.228上即上面新安裝的jenkins上操做,步驟以下:
先設置備份與還原的配置:
Jenkins --> 系統管理 --> ThinBackup --> Setting -->如圖:
Jenkins --> 系統管理 --> ThinBackup --> Restore 如圖:
如圖鉤選上
Restore next build number file(build文件)
Restore plugins(還原插件)
點擊Restore 一樣須要等待一段時間;能夠查看/var/lib/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中有一條以下記錄:
複製/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/下 直到全部從節點
的應答指紋都在存在;
Jenkins -->系統管理--> 節點管理--> New Node --> Node name -->固定節點 如圖:
點擊 「Credentials」 Add 添加jenkins與從節點通信方式爲ssh 私鑰 並粘貼私鑰文件
如圖:
保存;
再次點擊節點測試能夠發現 從節點正常啦!
下面以TEST-rsyncV3images job 在恢復過來的jenkins上運行,這是用來把線上圖片同步到本地全部測試環境中的job:
如下是以恢復過來的Jenkins上測試執行一個job查看是否部署成功與恢復成功~
到此,jenkins部署配置,以及添加從節點,備份與恢復完成~ 不再怕jenkins故障致使業務沒法部署上線啦,這是我這邊找的解決方案,是實踐中整理筆記 ,讀者們要是有更好的方法,煩請留言告知下,同時也能夠對本文的錯誤遺漏之處作指正,謝謝~