Jenkins+maven+SVN+Tomcat持續整合釋出環境安裝和配置
Jenkins是基於Java開發的一種持續整合
Jenkins安裝檔案下載
目前最新的版本是2.46.1版本
把Jenkins 2.46.1版解壓後,有兩種執行方式:
1. 執行 java -jar jenkins.war,採用內建jetty伺服器。
2. 將下載的war包檔案部署到 servlet 容器(比如tomcat),然後啟動容器(推薦這種方式)。
Jenkins啟動後訪問 http://localhost:8989/jenkins (8989此埠可根據實際情況修改,tomcat預設的埠為8080),可開啟如下介面表示安裝成功
第一次登陸需要輸入管理員密碼,密碼在jenkins的安裝後的.jenkins\secrets\initialAdminPassword資料夾,輸入後點擊Continue按鈕,頁面會調轉到
此時建立一個管理員賬號和密碼以及電子郵箱地址,然後點選Save and Finish進入,顯示下圖則表明jenkins啟動成功
主要系統配置:
系統管理-Global Tool Configuration
配置JDK
配置MAVEN
系統管理-系統設定
主目錄設定,可以預設,在windows下面是 C:\Users\使用者名稱\.jenkins,可手動設定到其他目錄,比如F:\.jenkins等
jenkins Location設定:建議修改為IP加埠
在這兒還可以配置MAVEN和EMAIL、GitHub、SonarQube等,待具體使用時再詳細介紹。
新建一個專案JOB任務
本文以一個Maven結構的java web工程為列:
點選新建
輸入專案名
輸入Job名,然後選擇構建一個風格自由的軟體專案,以及其他一些引數資訊注意:如果有多個專案,建議工作空間+專案名稱,例:C:\Users\admin\.jenkins\workspace\demo,demo為專案名稱,也可取其它名稱,這樣會在工作空間下新建不同目錄,以便區分不同專案
原碼管理
在此我使用svn;填寫Repository URL及Credentials,及svn的地址及使用者資訊,其中Credentials在首頁Credentials選項新建;
注意:如果是Maven專案,且有多個模組,則Repository URL路徑指向所有專案的根地址
在首頁Credentials選項新建,輸入svn的賬號和密碼
構建觸發器:
Poll SCM:定時檢查原始碼變更(根據SCM軟體的版本號),如果有更新就checkout最新code下來,然後執行構建動作。我的配置如下:
*/5 * * * * (每5分鐘檢查一次原始碼變化)
Build periodically:週期進行專案構建(它不care原始碼是否發生變化),我的配置如下:
0 2 * * * (每天2:00 必須build一次原始碼)
注:Schedule的配置規則是有5個空格隔開的字元組成,從左到右分別代表:分 時 天 月 年。*代表所有,0 12,20 * * * 表示“在任何年任何月任何天的12和20點0分”進行構建。
專案構建:
maven version : 選之前錄入的maven;
Goals選項輸入打包編譯時要執行的命令,如:clean package/clean install;
POM選項選擇pom檔案所在的相對位置,如果有多個Maven模組,選擇父級的pom.xml;
儲存,首頁左側 點選 立即構建 選項即可構建專案了。
監控:
當任務一旦執行,您將會看到這個任務正在佇列中的儀表板和當前工作主頁上執行。這兩種顯示如下。
圖29 主頁監控(左),專案監控(右)
一旦構建完成後,完成後的任務將會有三個地方進行顯示。
你可以在Jenkins的控制面板上看到它,如下圖。
圖30 主頁專案介面
在上面展示的截圖中,您將注意到有兩個圖示描述當前作業的狀態。S欄目代表著“最新構建狀態”,W欄目代表著“構建穩定性”。Jenkins使用這兩個概念來介紹一個作業的總體狀況:
構建狀態:下圖中分級符號概述了一個Job新近一次構建會產生的四種可能的狀態:
Successful:完成構建,且被認為是穩定的。
Unstable:完成構建,但被認為不穩定。
Failed:構建失敗。
Disabled:構建已禁用。
圖31 構建狀態介面
構建穩定性: 當一個Job中構建已完成並生成了一個未釋出的目標構件,如果您準備評估此次構建的穩定性,Jenkins會基於一些後處理器任務為構建釋出一個穩健指數 (從0-100 ),這些任務一般以外掛的方式實現。它們可能包括單元測試(JUnit)、覆蓋率(Cobertura )和靜態程式碼分析(FindBugs)。分數越高,表明構建越穩定。下圖中分級符號概述了穩定性的評分範圍。任何構建作業的狀態(總分100)低於80分就是不穩定的。
圖32 構建穩定性介面
你也可以在當前Job主介面上看到它,如下圖左下部分
圖33 專案主介面
當前作業主頁上還包含了一些有趣的條目。左側欄的連結主要控制Job的配置、刪除作業、構建作業。右邊部分的連結指向最新的專案報告和構件。
通過點選構建歷史(Build History)中某個具體的構建連結,您就能跳轉到Jenkins為這個構建例項而建立的構建主頁上。如下圖
圖34 構建歷史介面
如果你想通過檢視輸出介面來監控當前任務的進展情況。你可以單擊Console Output(控制檯輸出)。如果工作已完成,這將顯示構建指令碼產生的靜態輸出;如果作業仍然在執行中,Jenkins將不斷重新整理網頁的內容,以便您可以看到它執行時的輸出。如下圖:
圖35 控制檯輸出介面
檢視構建日誌:
日誌資訊:
構建成功!!!如報一下錯誤:
解決方案:
(a)修改pom.xml檔案
<build>
<finalName>demo</finalName>
</build>
新增<defaultGoal>install</defaultGoal>
即:
<build>
<defaultGoal>install</defaultGoal>
<finalName>demo</finalName>
</build>
(b)指定預設Goals
clean install -Dmaven.test.skip=true #加入了跳過測試的程式碼
重新構建。
部署專案:
構建後操作:
配置後儲存,重新構建,其中demo是我web專案的名稱,此處的http://localhost:8081,是部署demo專案的伺服器和埠
WAR/EAR files:target\demo.war,是構建後生成的war包,正常情況下打包成功後就會部署到tomcat下webapps目錄下,如
果構建成功,但沒有自動部署,修改WAR/EAR files:**/*.war試試。
構建成功後,即可登入專案驗證:
到此Jenkins部署就完成了!!!!!!!!!!!!!!
Jenkins自動部署配置
jenkins自動Deploy外掛安裝
要實現jenkins的自動部署,首先是要下載 Deploy to Container Plugin 外掛(這個是支援將程式碼部署到tomcat容器的)
找到:外掛管理 在“可選外掛”介面
安裝完之後,如果勾選了:安裝完成後重啟jenkins 那麼會重啟jenkins。
Tomcat伺服器賬號配置
另外還需要在被髮布那臺Tomcat設定相應的管理員賬號和密碼:
在tomcat的安裝路徑conf\tomcat-users.xml資料夾下新增
<role rolename="manager"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager,manager-gui,manager-script,manager-jmx,manager-status"/>
然後重啟Tomcat,在jenkins的任務“增加構建後操作步驟”中選擇“DePloy War/ear to container”,然後新增對應目標tomcat伺服器的連線URL,登入名,密碼,釋出的war/ear包的原路徑和tomcat的webapps下面的工程報名(原war包名和部署後的工程名可不一致,比如之前是target目錄下的demo.war檔案,部署後可改名為demo2)
圖28 遠端部署配置介面
WAR/EAR files:war檔案的存放位置,如:target/test.war 注意:相對路徑,target前是沒有/的。
Context path:訪問時需要輸入的內容,如ofCard訪問時如下:http://192.168.x.x:8080/ofCard/如果為空,預設是war包的名字。
Container:選擇你的web容器,如tomca 6.x
Manager user name:填入tomcat-users.xml配置的username內容
Manager password:填入tomcat-users.xml配置的password內容
Tomcat URL:填入http://192.168.x.x:8080/
Deploy on failure:構建失敗依然部署,一般不選擇
注意:雖然這種部署方法可能會導致tomcat載入時出現卡死的現象。但是也是最簡單的部署方式。如果卡死了重啟下就好了,將tomcat的java記憶體引數調高可以解決這個問題。
Jenkins郵件配置
一、Jenkins內建預設的郵件通知配置
1、全域性配置 點選左邊的“系統管理”選單,選擇右邊的“系統設定”在系統設定中找到Jenkins Locaction項填入Jenkins URL和系統管理員郵件地址,系統管理員郵件地址一定要配置,否則發不了郵件通知。因為郵件通知都是由系統管理員的郵箱發出來的。
找到郵件通知項,填入SMTP伺服器資訊及使用者名稱、密碼等認證資訊。(此處使用SMTP使用者名稱和密碼需要特別注意的是如果是QQ和163等郵箱配置試密碼不是郵件使用者名稱的密碼,)
配好以後勾選“通過傳送測試郵件測試配置”
填入接收測試郵件的地址,點選“Test configuration”。如果配置正確就會在下面顯示Email was successfully sent
在測試接收郵箱就會收到由Jenkins系統管理員的郵箱發出來的一封測試郵件。說明郵箱通知確實已經配置正確並能夠正常收發Jenkins的通知郵件了。有網友說如果配的傳送郵箱是某個郵件服務商的比如163的郵件,接收郵箱也得要配相同郵件服務商163的才可以收到郵件,經過測試沒有這種限制,只要是能夠收發郵件隨便配哪個郵件服務商126、163、QQ、189甚至公司郵件等的都可以收。
2、專案配置 郵件通知的全域性設定配好以後就可以在具體的專案中應用傳送郵件通知了。
在專案的設定中找到“增加構建後的操作步驟”,選擇“E-mail Notifacation”通過E-mail通知。
在Recipients中填入郵件通知接收者中,如果有多個接收者用空格分隔,可以傳送郵件通知給多個相關的接收人。
如果配置沒有問題,在構建出問題的時候都會有郵件通知到郵件通知接收者。
二、Email Extension Plugin外掛配置郵件通知
1、全域性配置 同樣在點選左邊的“系統管理”選單,選擇右邊的“系統設定”,找到Extend E-mail Notification進行全域性配置。同樣填好SMTP Server的資訊。點選“高階”進行SMTP鑑權的配置,配置發郵件人的使用者名稱、密碼等資訊。
預設收件人填需要傳送郵件通知的人,如有多個用空格分隔
點選最右下角的"Default Triggers ..."按鈕設定預設的觸發郵件通知的事件。
根據實際情況勾選需要觸發郵件通知的事件。
儲存全域性的配置資訊後到專案中進行專案的配置。 2、專案配置 進入到具體的專案配置介面點選“配置”,在配置介面點選“增加構建後操作步驟”,選擇“Editable Email Notification”
在設定中儲存預設就可以了。
可以在“Advanced Settings”中針對該專案進行個性化的配置。
可以針對該專案定義該專案通知的收件人列表、主題、內容、附件等。
設定完後點擊儲存。就可以去驗證是否可以郵件通知了。 通過測試工程構建後,Jenkins配置的郵件通接收人可以正常收到構建資訊的郵件通知。
到這裡Jenkins配置郵件通知全部完成了。 ====================================== 郵件通知配置相關的全域性屬性詳解 1. Override Global Settings:如果不選,該外掛將使用預設的E-mail Notification通知選項。反之,您可以通過指定不同於( 預設選項)的設定來進行覆蓋。 2. Default Content Type:指定構建後傳送郵件內容的型別,有Text和HTML兩種. 3. Use List-ID Email Header:為所有的郵件設定一個List-ID的郵件信頭 4. Add 'Precedence: bulk' Email Header:設定優先順序 5. Default Recipients:自定義預設電子郵件收件人列表。如果沒有被專案配置覆蓋,該外掛會使用這個列表。您可以在專案配置使用$ DEFAULT_RECIPIENTS引數包括此預設列表,以及新增新的地址在專案級別。新增抄送:cc:電子郵件地址例如,CC:[email protected] 6. Reply To List:回覆列表, A comma separated list of e-mail addresses to use in the Reply-To header of the email. This value will be available as $DEFAULT_REPLYTO in the project configuration. 7. Emergency reroute:如果這個欄位不為空,所有的電子郵件將被單獨傳送到該地址(或地址列表)。 8. Excluded Committers:防止郵件被郵件系統認為是垃圾郵件,郵件列表應該沒有擴充套件的賬戶名(如:@domain.com),並且使用逗號分隔 9. Default Subject:自定義郵件通知的預設主題名稱。該選項能在郵件的主題欄位中替換一些引數,這樣你就可以在構建中包含指定的輸出資訊。 10. Maximum Attachment Size:郵件最大附件大小。 11. Default Content:自定義郵件通知的預設內容主體。該選項能在郵件的內容中替換一些引數,這樣你就可以在構建中包含指定的輸出資訊。 12. Default Pre-send Script:預設傳送前執行的指令碼(注:grooy指令碼,這是我在某篇文章上看到的,不一定準確)。 13. Enable Debug Mode:啟用外掛的除錯模式。這將增加額外的日誌輸出,構建日誌以及Jenkins的日誌。在除錯時是有用的,但不能用於生產。 14. Enable Security:啟用時,會禁用傳送指令碼的能力,直接進入Jenkins例項。如果使用者試圖訪問Jenkins管理物件例項,將丟擲一個安全異常。 15. Content Token Reference:郵件中可以使用的變數,所有的變數都是可選的。 全域性郵件變數 email-ext外掛允許使用變數來動態插入資料到郵件的主題和內容主體中。變數是一個以$(美元符號)開始,並以空格結束的字串。當一個郵件觸發時,主題和內容主體欄位的所有變數都會通過真實的值動態地替換。同樣,變數中的“值”能包含其它的變數,都將被替換成真實的內容。 比如,專案配置頁的預設主題和內容分別對應的是全域性配置頁面的DEFAULT_SUBJECT和DEFAULT_CONTENT,因此它會自動地使用全域性的配置。同理,觸發器中的Subject和Content分別對應的是專案配置頁面的DEFAULT_SUBJECT和DEFAULT_CONTENT,所以它也會自動地使用專案的配置。由於變數中的“值”能包含其它的變數,所以就能為變數快速地建立不同的切入點:全域性級別(所有專案),專屬級別(單一專案),觸發器級別(構建結果)。 如果你要檢視所有可用的變數,你可以點選配置頁的Content Token Reference的問號獲取詳細的資訊。 所有的變數都是可選的,每個變數可以如下表示,字串型別使用name=“value”,而布林型和數字型使用name=value。如果{和}標記裡面沒有變數,則不會被解析。示例:$TOKEN,${TOKEN},${TOKEN,count=100},${ENV,var=”PATH”} 提示:用英文逗號分隔變數的引數。 常用的屬性如下: ${FILE,path="PATH"} 包括指定檔案(路徑)的含量相對於工作空間根目錄。 path檔案路徑,注意:是工作區目錄的相對路徑。 ${BUILD_NUMBER} 顯示當前構建的編號。 ${JOB_DESCRIPTION} 顯示專案描述。 ${SVN_REVISION} 顯示svn版本號。還支援Subversion外掛出口的SVN_REVISION_n版本。 ${CAUSE} 顯示誰、通過什麼渠道觸發這次構建。 ${CHANGES } -顯示上一次構建之後的變化。 showPaths 如果為 true,顯示提交修改後的地址。預設false。 showDependencies 如果為true,顯示專案構建依賴。預設為false format 遍歷提交資訊,一個包含%X的字串,其中%a表示作者,%d表示日期,%m表示訊息,%p表示路徑,%