Jenkins的安裝配置和使用心得
Jenkins的安裝配置和使用心得
1 Jenkins介紹
Jenkins是一個獨立的開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能。前身是Hudson是一個可擴充套件的持續整合引擎。可用於自動化各種任務,如構建,測試和部署軟體。Jenkins可以通過本機系統包Docker安裝,甚至可以通過安裝Java Runtime Environment的任何機器獨立執行。
下圖是我在網上找的,便於理解:
2 環境準備
本文介紹的jenkins是基於Gitlab + Maven + Tomcat實現自動整合、打包、部署,其他整合方式可上網瞭解。
2.1 環境
(1) Gitlab倉庫
(2) 至少一臺伺服器用於安裝Jdk、Maven、Git、jenkins,ip:10.8.165.11
(3) 至少一臺目標生產伺服器,可多臺,ip:10.8.165.15
3 Jenkins安裝及相關配置
這裡Jenkins的安裝配置介紹不是很全面的,文章只做一些基本的描述。
3.1 下載
下載jenkins的war包。網址: https://jenkins.io/download。如圖:
3.2 安裝
Jenkins的安裝方式有很多,這裡根據最簡單的情況安裝,執行命令:
java -jar jenkins.war --httpPort=8888 -Dfile.encoding=UTF-8,也可以使用tomcat進行部署。開放8888埠,提供區域網內客戶機訪問,瀏覽器訪問10.8.165.11:8888進入到首頁,首次訪問需要初始化,如下圖:
進入/user/.jenkins/secrets/initialAdminPassword下獲取初始化管理員密碼,點選continue,在有網路的情況下進入到如下頁面:
可以選擇推薦的外掛安裝,也可以選擇自定義Jenkins的外掛安裝。無網路的情況出現如下提示:
則選擇Skip Plugin Installations跳過外掛安裝,離線外掛安裝後面介紹。
外掛安裝完成後進入如下頁面,設定登入使用者:
Save and Continue。
Save and Finish,設定成功後進入到jenkins首頁。
3.3 管理
(1) jenkins外掛安裝
jenkins依賴的外掛比較多,如果安裝jenkins時安裝了推薦的外掛,基本上已經夠用了,額外的外掛需要時再安裝,外掛的安裝有兩種方式:線上安裝和離線安裝。
A、線上安裝,登入jenkins,選擇系統管理,如圖:
進入如下頁面,點選外掛管理:
Updates欄位為可更新的外掛,Available為可線上安裝的,Installed為已安裝的,勾選需要的外掛,點選Install without restart,等待安裝完成。
B、離線安裝。
到https://plugins.jenkins.io進行外掛搜尋,如圖:
搜尋結果,選擇需要的外掛:
標記有required的依賴外掛為必須安裝的外掛,點選Archives進入到jenkins外掛庫:
選擇合適的版本,下載hpi檔案:
下一步到jenkins系統管理→外掛管理→Advanced選項下,上傳已經下載的hpi檔案,重啟jenkins即可。注意:外掛之間有很多依賴,根據提示下載相應版本的外掛安裝。
(2) jenkins系統設定
配置之前需要說明一點,提前安裝外掛,避免配置過程中返回安裝外掛,打亂思緒,因為jenkins外掛互相依賴的較多,比較零亂,有遺漏的再補充,所需外掛:Folders Plugin、Maven、SSH、Gitlab、Gitlab Hook Plugin、ThinBackup等及其所依賴的必須外掛。
配置的大概過程為:配置jenkins工具的jdk、maven、git → 然後再進行系統環境設定 → 再配置SSH Servers。
A、jdk、maven、git配置,依次點選Manage Jenkins→Global Tool Configuration,如下,進行系統全域性工具配置:
配置maven,加入maven的setting.xml的配置檔案,
File path:“../conf/settings.xml”如圖:
配置jdk,Name取jdk1.8.0_192(可自己隨意取,這裡取安裝時的jdk名字),新增jdk的安裝目錄,JAVA_HOME:“../java/jdk1.8.0_192”如圖:
配置git,Name隨意取,新增git的安裝路徑,Path to Git executable:“../Git/bin/git.exe” 如圖:
B、Jenkins系統環境設定,進入系統設定,如圖:
Jenkins的Home directory:“../jenkins”,建議修改,不要使用預設的目錄,修改方式點選後面的問號即可檢視,如圖:
Maven的jar包倉庫(Global MAVEN_OPTS),此選項為構建過程中maven jar包下載的目錄,在這裡遇到過不同情況,經過測試,linux伺服器下載後會在每個專案下建立一個的存放jar包的repository目錄,windows伺服器則不會,為了避免jar包重複下載,節省空間,所以在此修改到一個路徑下,Global MAVEN_OPTS:“-Dmaven.repo.local=../repository”如圖:
C、SSH Servers,需要先安裝ssh外掛,依次進入:Manage Jenkins→Configure System,下拉滾動條到Publish over SSH,配置ssh的連線,目的是通過jenkins連線伺服器,對伺服器進行一些列的操作,ssh 連線的方式有兩種。
一種是通過金鑰驗證,免密登入,大致過程如下:
Jenkins伺服器(11)生成金鑰對,並將公鑰(id_rsa.pub)儲存到生產機目標伺服器(15);11此時要登入15,傳送請求到15,15生成隨機字串並用11的公鑰加密後,發給11;11用私鑰將其解密後發回給15,驗證成功後登入。
這裡考慮到多臺伺服器的部署,免去重複配置,就將金鑰配置到Jenkins的公共配置裡,在私有配置中配置也可以,如圖:
Passphrase:密碼(11伺服器生成金鑰對的密碼,如果未設定則為空)
Path to key:私鑰(id_rsa)的路徑
Key:私鑰(id_rsa)的內容
私有配置:
SSH Server Name:jenkins測試(隨便取)
Hostname:ssh連線的目標主機ip,10.8.165.15
Username:使用者名稱
Remote Directory:遠端目錄
測試連線,success表示連線成功。
另一種是通過使用者名稱和密碼的連線,通過使用者名稱和密碼連線的方式則無需配置金鑰的一步,直接進行如下配置:
點選Advanced...,新增密碼,測試連線success,如圖:
如果多臺伺服器配置點選add按鈕新增,配置方式一樣,如圖:
到此,ssh伺服器已配置完畢。
4 系統部署
對於jenkins的自動構建部署,首先我們要了解jenkins工作的過程,才知道需要配置些什麼,文章開頭對jenkins原理大概描述了,我們要實現的就是:開發者只要通過IDE提交程式碼到GitLab,jenkins能自動監測到提交的最新程式碼,從GitLab特定分支下載原始碼,並通過maven構建工具進行編譯打包(war、jar),通過shell指令碼對專案歷史版本進行備份、刪除,然後通過ssh外掛工具上傳到生產Tomcat專案部署路徑下,對Tomcat進行停止,重啟,完成自動部署。
下面進行專案配置,建立專案,如圖:
填寫專案名稱,建立maven專案,點選確定,如圖:
緊接著到專案配置的頁面,複製gitlab專案的ssh下載地址:
Description,填寫一下專案描述:
然後進入Source Code Management(原始碼管理),如果在gitlab中設定了金鑰,則需要到Jenkins的Credentials→System→Global credentials (unrestricted)下新增憑據,然後Credentials處可以選擇所新增的憑據名稱了,也可以在此處直接點Add新增,只要保證jenkins能從gitlab下載原始碼即可。
下一步Build Triggers,構建需求中要求IDE提交程式碼即立即觸發構建,用到一個叫webhooks的輕量的事件處理應用,gitlab中已經有這項功能,這就需要先下載Gitlab Hook Plugin 外掛,如果你安裝好外掛後能看到如圖功能,勾選Build when a change is pushed to GitLab,這裡複製 GitLab webhook URL暫時儲存到記事本,後面有用。
點選Advanced...展開,點選Generate建立Secret token,再把token複製到記事本,如圖:
接下來到gitlab中設定,進入到專案設定中,看到webhooks選項,點進去看到如圖,將剛才儲存到記事本的url和Secret Token分別填入,下拉滾動條後看見Add Webhook,點選進入。
點選Add Webhook後,在已經新增的webhook中看到,
點選test,如果看到下圖。則證明連線成功。
下面進入到Pre Steps,點選Add pre-build step,進行構建前操作,目的是構建前對伺服器已經部署的專案進行備份,如圖:
點選Send files or execute commands over SSH,選擇已經新增的ssh servers,如圖:
Exec command中新增備份指令碼,參考:
echo "備份war" tomcatpath=/opt/app/apache-tomcat-8.0.46 war_name=專案名稱 mkdir -p ${tomcatpath}/webapps/bak cp ${tomcatpath}/webapps/${war_name}.war ${tomcatpath}/webapps/bak/${war_name}.war-`date +%Y-%m-%d_%H%M`
點選Build,配置maven的構建,指令“clean package -Dmaven.test.skip=true”,跳過且不編譯測試類,MAVEN_OPTS倉庫位置,如圖:
接下來配置構建後操作,進入Post Steps,點選Add post-build step,選擇Send files or execute commands over SSH,這一步操作將maven構建後的war包上傳到伺服器,關閉tomcat,重啟tomcat,以及日誌輸出到jenkins一系列步驟。
點選Send files or execute commands over SSH,
Name:選擇伺服器,
Source files:填寫構建後的war包(target/*.war),
Remove prefix:去掉Source files檔案的字首,這裡就是target,
Remote directory: 遠端目錄,上面配置ssh servers時路徑已經配好,這裡不 需要重複配置。
Exec command:執行指令對tomcat進行操作。
指令碼參考:
#!bin/bash tomcatpath=/opt/app/apache-tomcat-8.0.46 war_name=專案名稱 echo "關閉tomcat" sh ${tomcatpath}/bin/shutdown.sh echo "檢查tomcat是否關閉" tomcat_pid=`ps -ef|grep "tomcat" |grep -v grep|awk '{print $2}'` echo $tomcat_pid kill -9 $tomcat_pid echo "tomcat has shutdown" echo "刪除專案" rm -rf ${tomcatpath}/webapps/${war_name}_bak mv ${tomcatpath}/webapps/${war_name} ${tomcatpath}/webapps/${war_name}_bak rm -rf ${tomcatpath}/logs/catalina.out echo "啟動tomcat" sh ${tomcatpath}/bin/startup.sh echo "輸出日誌" sleep 8s i=1 while(($i<20)) do CHECK_RESULT=`cat ${tomcatpath}/logs/catalina.out | grep 'org.apache.catalina.startup.Catalina.start Server startup in' | wc -l` if(($CHECK_RESULT==1)) then cat ${tomcatpath}/logs/catalina.out echo "build success" exit 0 else echo "waiting"$i sleep 2s fi i=$(($i+1)) done cat ${tomcatpath}/logs/catalina.out echo "build fail" exit 1
如需構建成功後進行郵件通知可接著配置:
到這裡,專案配置大概完畢,回到專案首頁,點選立即構建:
檢視日誌:
構建成功:
Tomcat啟動成功,整個構建過程完畢,tomcat的日誌列印參考linux cat指令,tail指令。
如果上面Build Triggers webhooks配置成功,那麼只要提交程式碼到gitlab,即可自動構建,就不需要人工干預去執行構建操作了。
5 維護
5.1 備份
Jenkins的配置建議進行備份,備份方法:安裝ThinBackup外掛,進入Manage Jenkins→ ThinBackup,如圖:
點選Settings,設定Backup directory備份目錄:
回到ThinBackup外掛首頁,點選 Backup Now,這一步沒有提示,去到備份目錄下可看到備份的記錄:
恢復備份點選Restore,如圖,選擇恢復的版本,恢復即可: