分類  >  編程 >

Maven入門實戰札記10-持續集成

tags:    時間:2013-12-23 13:25:45
Maven入門實戰筆記10-持續集成

 

 

 

 

持續集成

概念:

持續集成就是快速高頻率自動構建項目的所有源碼,並為項目成員提供豐富的反饋信息。

其中構建包括:編譯、測試、審查、打包、部署

持續集成流程:



 一次完整的集成一般包括6個步驟:

1.持續編譯

2.持續資料庫集成

3.持續測試

好的單元測試必須是自動化的、可重複執行的、不依賴於環境的,並且能夠自我檢查的

4.持續審查

Checkstyle和PMD之類的工具發現代碼中的壞味道(Bad Smell)

5.持續部署

6.持續反饋

 

硬體設置:集成伺服器性能越高越好

源碼控制工具、自動化構建工具、自動化測試工具、持續集成軟體

優秀的持續集成工具:

開源工具CruiseControl、Hudson

商業的Bamboo和TeamCity

 

Hudson簡介

優點:

功能強大、界面易用,與主流構建工具、版本控制系統以及自動化測試框架都能很好集成

靈活的插件擴展框架

安裝Hudson

下載:http://hudson-ci.org/ 

下載文件為:hudson-3.0.0.war

運行:最簡單啟動方式為

java -jar hudson-3.0.0.war

 

 

啟動后,訪問 http://localhost:8080

停止:Ctrl+C

默認商品為8080,指定埠啟動

java -jar hudson-3.0.0.war --httpPort=8082

 

 

 也可以把war包部署到各種Web容器中

 

問題:用命令行啟動時,遇到下列問題:

 

       Initial setup required. Please go to the Hudson Dashboard and complete the setup.

訪問hudson設置插件安裝,即可(選擇默認安裝)

安裝個插件費這麼長時間。。。最後截個圖



 建議裝到本地

 

選擇Install as Windows Service

 

 

準備Subversion倉庫

常見版本控制工具:CVS、Subversion、Git、Mercurial

安裝Subversion伺服器軟體(svnserve) 參考   svn應用筆記

常用命令:

1.查看svnserve安裝

svnserve --version

 

 

 

2.創建一個Subversion倉庫

 

mkdir svn-repos  svnadmin create svn-repos\account

 3.導入account項目,導入前,用mvn clean清除項目輸出文件

 

 

svn import -m "initial import" . file:///d:/svn/svn-repos/account/trunk

 

 上述命令將當前目錄的全部內容提交到Subversion倉庫的/account/trunk路徑下

 

-m選項表示提交的註釋

3.啟動svnserve服務

svnserve -d -r svn-repos --listen-host 0.0.0.0

-d表示將svnserve服務作為守護進程運行

 

-r表示Subversion倉庫的位置

--listen-host是為了強制將svnserve綁定到IPv4地址(有些系統,svnserve會默認綁定IPv6,當Hudson使用IPv4地址訪問Subversion倉庫的時候就會失敗)

疑問:這個命令沒有指定啟動哪個庫,若在svn-repos下有多個庫的話,是啟動哪個呢?

直接用這個命令,就明白了

svnserve -d -r d://svn/svn-repos/account --listen-host 0.0.0.0

 

 

4.檢查Subversion倉庫內容

 

svn list svn://localhost/account/trunk

 

 

 

Hudson的基本系統設置a在創建Hudson持續集成任務之前,用戶需要對Hudson系統做一些基本的配置,包括JDK安裝位置和Maven安裝等在內的重要信息都 必須首先配置正確。

左側「系統管理」--->右側「系統設置」

1.配置JDK

Name(別名)

JAVA_HOME

2.配置Maven

Name

MAVEN_HOME

3.配置MAVEN_OPTS環境變數

參考  Maven入門實戰筆記01  -Xms128m -Xmx512m

最後,點擊頁面正文的Save按鈕保存系統設置

 

創建Hudson任務

創建Hudson任務來集成Maven項目

左邊「新建任務」--->填寫任務的名稱及類型



 對於一般Maven項目可選擇

    構建一個自由風格的軟體項目
    構建一個Maven 2/3 (Legacy)項目

這兩項,前者不公支持Maven項目,還支持其他類型的構建工具,如Ant、Shell。

對於Maven用戶來說,兩者最大的不同在於前者需要用戶進行多一點的配置,而後者會使用Hduson自帶的Maven,且從項目的POM中獲取中夠的信息以免去一些配置。推薦free-style

 

Hudson任務的基本配置

1.名稱和描述,當任務比較多的時候,簡潔而有意義的名稱及描述就十分重要

2.Discard Old Builds:該選項配置如何拋棄舊的構建

Hudson每次構建相關的文件都會保存下來,將會漸漸耗光磁碟空間,為此Hudson提供兩種方式供選擇:

Days to keep builds:如果其值為非空的N,就留N天之內的構建文件

Max # of builds to keep:如果#為非空,就公保留最多#個最近構建的相關文件

 上圖所示配置表示最多保留10個最近的構建

3.如果有多個JDK,這裡還需選擇JDK版本

 

Hudson任務的源碼倉庫配置

在項目配置頁面的Source Code Management部分,選擇 Subversion,輸入Subversion倉庫地址 ,一般來說,其他選項保留默認值即可,如圖:



 如果Subversion倉庫需要認證,Hudson會提示用戶輸入認證信息:



 

Hudson任務的構建觸發配置

在Build Triggers部分配置的是觸發構建的方式。

Build after other projects are built:在其它項目構建完成後構建本項目

Bukld periodically:周期性地構建本項目

Poll SCM:周期性地輪詢源碼倉庫,發現有更新的時候構建本項目,推薦選這個

 

既然是輪詢,就需要配置輪詢的頻率,Hudson使用了著名的UNIX任務高度工具Cron(http://en.wikipedia.org/wiki/Cron)所使用的配置方式。這種配置方式使用5個欄位表示不同的時間單位(欄位之間用空格或製表符分隔)

分 :0-59

時 :0-23

日 :1-31

月 :1-12

星期幾 :0-7(0和7都表示星期天)

特殊字元:

*:星號表示匹配範圍內所有值

M-N:連字元表示匹配M-N範圍內的所有值,如"1-5"

A,B,...,Z:逗號表示匹配多個值,如"0,15,10"

*/X或M-N/X:範圍加上斜杠表示匹配範圍內能被X整除的值,如「1-10/3」,就等同於「3,6,9」

舉例:

(1)****:每分鐘

(2)5****:每小時中的第5分鐘

(3)*/10****:每隔10分鐘

(4)45 10 ** 1-5:每周一到周五的上午10點45分

(5)0,30 *  13 * 5:每月13號的每半個小時,或者每周五的每半個小時

在配置輪詢的時候,還可以使用「#」添加註釋,此外空白的行會被忽略。

對於一個健康的項目來說,覺見做法是:每隔10分鐘輪詢代碼倉庫(*/10 * * * *),如圖



 Hudson任務的構建配置

單擊Build中的Add build step下三角按鈕,選擇Invoke Maven2(legacy)(《Maven實踐》書中寫的是:Invoke top-level Maven targets),如圖:

 完成後,單擊Save

 

 

監視Hudson任務狀態a

Hudson界面,了解各個任務的當前及歷史狀態,包括整體的列表顯示、自定義視圖、單個任務的具體信息,如構建日誌和測試報告等

全局任務狀態  

默認主頁顯示了當前服務上所有集成任務的狀態,如圖:




 四部分:導航菜單、、構建隊列、構建狀態、任務狀態

任務狀態:

S:任務當前狀態;

第一列的球形顏色:

藍色:任務最近一次的構建是成功的

紅色:任務最近一次的構建是失敗的

黃色:任務最近一次的構建表成功了,但不穩定(主要是因為有失敗的測試)

灰色:任務從未被執行過或者被禁用了

如果圖標閃爍,表示任務正在執行一次構建

W:天氣

第二列,使用天氣圖標表示任務長期的一個狀態

萬里晴空:>80%成功

稍有烏云:60%-80%成功

烏雲密布:40%-60%成功

陰雨綿綿:20%-40%成功

電閃雷鳴:<20%成功

自定義任務視圖

用戶可以單擊默認視圖All旁邊的加號(+)以添加一個自定義視圖

單個任務狀態a

Maven項目測試報告

為了顯示項目的測試結果信息,需要一些額外的配置。

maven-surefire-plugin會在項目的tqrget/surefire-reports目錄下生成與JUnit兼容的XML格式測試報告,Hudson能夠基於這種格式的文件生成圖形化的測試報告。

 

為Hudson任務配置測試報告:

用戶可以配置一個Hudson,在配置頁面的Post-build Action部分選擇Publish JUnit test result report選項,並且將Test report XMLs賦值為

**/target/surefire-reports/TEST-*.xml

該表達式表示匹配任意目錄下target/surefire-reports/子目錄中以Test-開頭的XML文件,這也匹配所有maven-surefire-plugin生成的XML格式報告文件

有了上述配置后,就能在任務狀態頁面中看到最新的測試結果與測試結果趨勢

 

配置構建命令忽略測試:

將Maven構建命令以改為:clean deploy -Dmaven.test.failure.ignore

這樣失敗的測試就不會導致構建失敗

這種配置方式能夠幫助用戶區分失敗的構建與不穩定的構建

 

 

Hudson用戶管理

Subversion倉庫,默認該倉庫是匿名可讀的,認證用戶可寫,

現在關閉匿名可讀許可權,同時添加一些用戶。具體參考《Subversion與版本控制》

編輯Subersion倉庫下的conf/senserve.conf文件中的[general]小節,如下:

 

[general] # anon-access = read # auth-access = write password-db = passwd
anon-access = none:表示匿名用戶沒有任何許可權

 

auth-access = write:表示經認證用戶擁有讀寫許可權

password-db = passwd:表示存儲用戶信息的數據位於同級目錄下的passwd文件中

編輯conf/passwd文件如下:

 

[users] admin = admin123 yangdc = yangdc
 這裡為倉庫配置了三個用戶,等號左邊是用戶名,右邊是密碼
簡單的Subversion倉庫用戶許可權配置

用svn命令提交

svn commit -m "add developers config" --username yangdc --password yangdc

 

 Hudson得到這些更改並觸發集成任務之後,相關的Subversion用戶信息就已經被Hudson存儲起來了,單擊Hudson頁面左側的用戶,就可看到相關的用戶信息。

點擊配置,還可添加用戶郵箱

 

 

郵件反饋

為Hudson配置郵件伺服器信息。系統設置-->E-mail Notification部分

SMTP

Default user e-mail suffix

System Admin E-mail Address

Hudson URL

SMTP Authentication

 

關於SMTP設置,163郵箱的:

收件伺服器設置
IMAP收件伺服器地址:imap.163.com 安全:開(SSL/TLS) 埠號:993
126郵箱的IMAP伺服器地址:imap.126.com ,
yeah郵箱的IMAP伺服器地址:imap.yeah.net,其餘部分與163一致;
若安全選擇關閉,請將埠號改為 143。 
 
 
 發件伺服器設置
SMTP發件伺服器地址:smtp.163.com 安全:開(SSL/TLS) 埠號:465 / 994
126郵箱的SMTP伺服器地址:smtp.126.com ,
yeah郵箱的SMTP伺服器地址:smtp.yeah.net;
若安全選擇關閉,請將埠號改為 25。 

 

接下來配置Hudson任務使用郵件反饋,進入任務的配置頁面,找到最後Post-build Action小節中 E-mail Notification複選框

問題:什麼樣的構建觸發郵件反饋,郵件會發送給誰?

第一個問題:

(1)失敗的構建會觸發郵件反饋

(2)成功構建后的一次不穩定構建會觸發郵件反饋,不穩定往往是由失敗的測試引起的,因此成功后的一次不穩定往往表示有回歸性測試失敗

(3)失敗或不穩定構建后的一次成功構建會觸發郵件反饋

(4)用戶可以配置是否每次不穩定構建都觸發郵件反饋

第二個問題:

可以在 Recipients中配置一個郵件列表(用空格分離),一般來說項目負責人應該在這個列表中,選項 Send separate e-mails to individuals who broke the build  表示是否為所有的不穩定構建觸發郵件反饋,如果 不選,只有成功構建后的第一次不穩定構建才會觸發郵件反饋。推薦選上    

 

Hudson工作目錄

 了解Hudson的工作目錄不僅能幫助讀者理解Hudson用戶界面中的各種特性,更重要的是,讀者需要明白怎樣為Hudson分配合理的磁碟空間,長期運行的持續集成服務往往會消耗大量的磁碟空間,理解哪些任務對應的哪些文件消耗了多少磁碟空間,對持續集成服務的維護來說是至關重要。

 

默認情況:Hudson使用用戶目錄下的.hudson/目錄作為工作目錄

改變該目錄,設置環境變數HUDSON_HOME,例如,設置為D:\tools\_data\hudson

一個典型的Hudson工作目錄:

*.xml

war

users

userContent

updates

plugins

jobs

 

  最重要的就屬jobs子目錄,



 

 這裡包含了所有Hudson的任務配置、每個任務的工作區、構建歷史等信息

每個任務都會包含如config.xml、nextBuildNumber、scm-polling.log等文件,其中config.xml包含了該任務的所有配置

每個任務目錄下會包含一個workspace子目錄,這就是該任務的工作區,這裡有最近一次構建所包含的源代碼及相關輸出

任務目錄下有一個builds子目錄,該目錄包含了所有Hudson記錄的歷史構建,每個構建對應了一個目錄,目錄以發生時間命名

 -------------------------------------------------

@author Free Coding http://ln-ydc.iteye.com/ 

http://ln-ydc.iteye.com/admin/blogs/1833031

 

推薦閱讀文章

Bookmark the permalink ,來源:互聯網