Jenkins的安裝配置和使用java
1 Jenkins介紹linux
w3cschool中這樣介紹:Jenkins是一個獨立的開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。前身是Hudson是一個可擴展的持續集成引擎。可用於自動化各類任務,如構建,測試和部署軟件。Jenkins能夠經過本機系統包Docker安裝,甚至能夠經過安裝Java Runtime Environment的任何機器獨立運行。git
下圖是我在網上找的,便於理解:web
2 環境準備shell
本文介紹的jenkins是基於Gitlab + Maven + Tomcat實現自動集成、打包、部署,其餘集成方式可上網瞭解。apache
2.1 環境windows
(1) Gitlab倉庫瀏覽器
(2) 至少一臺服務器用於安裝Jdk、Maven、Git、jenkins,ip:10.8.165.11tomcat
(3) 至少一臺目標生產服務器,可多臺,ip:10.8.165.15bash
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,如圖,選擇恢復的版本,恢復便可: