轉(zhuǎn)載自:http://blog.csdn.net/ninibinbin/article/details/4501504
持續(xù)集成工具h(yuǎn)udson與maven2的結(jié)合
之前在網(wǎng)上查過一些資料,都說hudson作為持續(xù)集成工具是十分好的,,因?yàn)橐趯?shí)際項(xiàng)目中應(yīng)用,,所以自己嘗試搭建持續(xù)集成服務(wù)器,持續(xù)集成相對(duì)其他,,網(wǎng)上的資料少之又少,,尤其是hudson,基本上網(wǎng)上的資料大部分是針對(duì)ant,,而且教程更是少的可憐,。因?yàn)槲覀兊捻?xiàng)目要用到maven2,所以我最開始嘗試的是使用continuum(maven開源項(xiàng)目中的子項(xiàng)目),,個(gè)人認(rèn)為對(duì)maven2支持應(yīng)該不錯(cuò),,有興趣大家可以去了解一下。開始用continuum搭建持續(xù)集成服務(wù)器成功,,但是感覺continuum在使用上一般,,主要針對(duì)用戶體驗(yàn),功能相對(duì)比較簡單,,并沒有大量的詳細(xì)內(nèi)容,。在網(wǎng)上看到hudson對(duì)maven2支持也是十分不錯(cuò),,所以嘗試搭建hudson,經(jīng)過查資料和胡亂嘗試,,終于成功,,總體感覺比continuum要好些,尤其是在功能管理上,,下面將自己搭建的過程寫出來,,希望大家可以交流,因?yàn)橐彩浅醮问褂?,很多地方可能不?duì),,見諒。
一,、持續(xù)集成的概念
概念網(wǎng)上很多了,,這里就不再詳細(xì)說了。
持續(xù)集成簡稱CI,,持續(xù)集成是頻繁,、持續(xù)的在多個(gè)團(tuán)隊(duì)成員的工作中進(jìn)行集成,并且給與反饋,。一個(gè)典型的持續(xù)集成周期包括以下幾個(gè)步驟:
1. 持續(xù)集成服務(wù)器不斷從版本控制服務(wù)器上檢查代碼狀態(tài),,看代碼是否有更新。
2. 如果發(fā)現(xiàn)代碼有最新的提交,,那么就從版本控制服務(wù)器下載最新的代碼,。
3. 等代碼完全更新以后,調(diào)用自動(dòng)化編譯腳本,,進(jìn)行代碼編譯,。
4. 運(yùn)行所有的自動(dòng)化測(cè)試。
5. 進(jìn)行代碼分析,。
6. 產(chǎn)生可執(zhí)行的軟件,,能夠提供給測(cè)試人員進(jìn)行測(cè)試。
持續(xù)集成服務(wù)器,,比如CruiseControl或者VSTS
CruiseControl, Anthill, Bamboo, TeamCity, Continuum,,hudson
二、hudson的簡介
Hudson 是一種革命性的開放源碼 CI 服務(wù)器,,它從以前的 CI 服務(wù)器吸取了許多經(jīng)驗(yàn)教訓(xùn),。Hudson 最吸引人的特性之一是它很容易配置:很難找到更容易設(shè)置的 CI 服務(wù)器,也很難找到開箱即用特性如此豐富的 CI 服務(wù)器,。Hudson 容易使用的第二個(gè)原因是它具有強(qiáng)大的插件框架,,所以很容易添加特性。例如,一個(gè) Hudson 插件可以隨時(shí)間的推移跟蹤 FindBugs 和代碼覆蓋,。它還可以報(bào)告測(cè)試結(jié)果的趨勢(shì)(來自 JUnit 或 TestNG)以及構(gòu)建結(jié)果和對(duì)應(yīng)的執(zhí)行時(shí)間,。
Hudson 需要運(yùn)行 Java 5。如果需要使用 Hudson 附帶的嵌入式容器(Winstone)之外的其他容器,,那么只需使用一種 Servlet 2.4 容器,。對(duì)于大多數(shù)情況,Winstone 就足夠了,。
三,、hudson的安裝(jdk5+tomcat+maven2)
使用hudson的好處重要是因?yàn)樗惭b和配置起來比較方便,一般只需要兩個(gè)步驟:
1,、下載最新版本的hudson工程包(war),官網(wǎng)下載即可 http://hudson./latest/hudson.war,;
2、將下載的war包直接放到tomcat_home/webapps目錄下
啟動(dòng)tomcat,,啟動(dòng)完成,,訪問http://localhost:8080/hudson/,(tomcat端口默認(rèn)是8080);如果看到歡迎頁面表示安裝成功,;(從網(wǎng)上找的,,因?yàn)槲业睦锩嬉呀?jīng)有項(xiàng)目了,不過大同小異,:))
四,、hudson的構(gòu)建
前置條件:
如果您想在Hudson完成一次構(gòu)建,必須符合下列條件:
您必須擁有一個(gè)可用的源代碼倉庫,。 這個(gè)倉庫必須包含你想要構(gòu)建的源代碼,。倉庫里必須包含能構(gòu)建源碼的構(gòu)建腳本。它們通常來源于Ant 或者Maven ,,但是Hudson也支持簡單Shell腳本,、NAnt 和MSBuild 。在本文中,,我們使用maven2來構(gòu)建
配置hudson:
在您開始構(gòu)建軟件之前,,需要對(duì)Hudson進(jìn)行一些小小的配置。首先,,您必須告訴Hudson您的Java JDK和MAVEN2的安裝位置,。點(diǎn)擊http://localhost:8080/Hudson 打開Hudson的主頁,單擊Manage Hudson ,。該網(wǎng)頁上附帶了下一步,,單擊Configure System 。
1.如下圖,,配置MAVEN_HOME
說明:開始需要點(diǎn)擊按鈕 add maven,出現(xiàn)下圖,,將默認(rèn)的Install automatically去掉,手動(dòng)指定MAVEN_HOME目錄
可以設(shè)置多個(gè)MAVEN的版本,在項(xiàng)目中選擇
2.配置jdk版本,,方法比較類似,,可設(shè)置多個(gè)
這里我設(shè)置了兩個(gè)JDK
hudson做的比較人性化,如果home目錄指定不對(duì),,會(huì)有相應(yīng)提示
3.配置郵件提醒功能
如果build失敗可以發(fā)送郵件提醒相關(guān)人員,,husdon的郵件配置比continuum配置要簡單的多,這里我們用Gmail的郵件服務(wù)器
如下圖配置:
SMTP 填寫gmail 的即可
管理員的郵件地址,,即所有的通知郵件通過該郵箱發(fā)送
hudson URL,,地址,本地會(huì)有警告,,填寫IP地址,,警告應(yīng)該會(huì)消失,沒試過,,呵呵
點(diǎn)擊高級(jí)選項(xiàng)設(shè)置郵件的用戶名,、密碼及端口,如下:
點(diǎn)擊 Test configuration by sending e-mail to System Admin Address 可以進(jìn)行郵件測(cè)試
配置完成,,hudson的基本配置完成,,下面將實(shí)際項(xiàng)目引入
在首頁點(diǎn)擊 New Job,出現(xiàn)以下:
輸入項(xiàng)目名稱,選擇 Build a maven2 project ,,點(diǎn)擊OK進(jìn)入下一步
各選項(xiàng)說明:
Project name :我已經(jīng)把這個(gè)項(xiàng)目命名為xwb,,但你也可以在這里修改它。
Description : 這是一個(gè)自由項(xiàng),,主要用來說明你關(guān)于這次構(gòu)建工作的描述,。可不填,。(幫助 :這說明放在項(xiàng)目的首頁,,以便訪問者可以知道這個(gè)工作的內(nèi)容。您也可以在這里使用任何HTML標(biāo)記,。)
Discard old builds : Hudson默認(rèn)將保留過去的構(gòu)建,,除非你事先選中此框。(幫助 :這里控制著您想要在Hudson所在的磁盤把構(gòu)建記錄存儲(chǔ)的有效期(諸如控制臺(tái)輸出,、編譯產(chǎn)成品等等),。Hudson為此提供了兩個(gè)標(biāo)準(zhǔn):1。時(shí)間驅(qū)動(dòng),。在Hudson中您可以判斷如果達(dá)到一定時(shí)限來刪除一條記錄(例如,,七天前)。2,。數(shù)量驅(qū)動(dòng),。在Hudson中您可以確保它擁有N份構(gòu)建,。如果又有新的構(gòu)建開始,最早的那份(記錄)就將被刪除,。Hudson也可以讓您建立的個(gè)別構(gòu)建定義為'永遠(yuǎn)保持這個(gè)記錄',,以便防止某些重要的構(gòu)建被自動(dòng)丟棄。)
This build is parameterized : 如果選擇此選項(xiàng),,Hudson將允許您提供一套任意的鍵值對(duì)參數(shù),,它們會(huì)被傳遞到構(gòu)建過程里。配置的參數(shù)往往是構(gòu)建運(yùn)行環(huán)境中的一些環(huán)境變量,。(幫助 :當(dāng)您使用了Hudson的各種自動(dòng)化,,有時(shí)要求在構(gòu)建過程中提供一組用戶的輸入,使用“parameterize”就能夠更方便構(gòu)建,。例如,,您可能會(huì)設(shè)立一個(gè)按需測(cè)試,在那里用戶可以提交一個(gè)二進(jìn)制文件的壓縮文件來進(jìn)行測(cè)試,。
本節(jié)參數(shù)可以完全按照您構(gòu)建的需要配置,。參數(shù)是以名字區(qū)分的,所以您可以有多個(gè)參數(shù),,只要它們名稱不同,。 關(guān)于此功能的更多資料請(qǐng)查看維基專題討論 。)
Disable build : 如果這里被勾選,,這項(xiàng)工作將不會(huì)執(zhí)行構(gòu)建,,直到選項(xiàng)禁用為止。(幫助 :有時(shí)候,,你會(huì)想暫停某個(gè)構(gòu)建中的項(xiàng)目,。例如,也許您正準(zhǔn)備一次大的遷移,,而且你知道新版本會(huì)失敗?;蛘吣朊恳粋€(gè)小時(shí)構(gòu)建一次,,但您卻發(fā)現(xiàn)CVS服務(wù)器將在未來24小時(shí)內(nèi)down機(jī)。當(dāng)這個(gè)選項(xiàng)被設(shè)置后,,關(guān)于這個(gè)項(xiàng)目就不會(huì)再有新的構(gòu)建,。這樣一來,您就可以在不想改變外部依賴或者提交錯(cuò)誤通知的情況下禁用構(gòu)建過程,。)
Advanced options : 我沒有使用這些選項(xiàng),,但是當(dāng)此復(fù)選框被選中時(shí),選項(xiàng)中就會(huì)暴露下面的接口:
Quiet period : 在這里您可以配置一個(gè)靜態(tài)監(jiān)控,,當(dāng)構(gòu)建準(zhǔn)備按某個(gè)計(jì)劃運(yùn)行時(shí),,實(shí)際上它就已經(jīng)在執(zhí)行了。
Use custom workspace : 默認(rèn)情況下,Hudson將在${jboss-home}/.hudson/jobs/[項(xiàng)目名稱](注:Linux環(huán)境 )下創(chuàng)建一個(gè)工作區(qū) ,。此選項(xiàng)將允許您使用指定的地址替代(它),。
Source code management : 在默認(rèn)情況下是這三個(gè)選項(xiàng):
Subversion
CVS
None
這個(gè)None會(huì)誤解我先前的主張 :一個(gè)先決條件是要有一個(gè)源代碼倉庫。但我堅(jiān)持認(rèn)為,,在大多數(shù)情況下,,為Hudson選擇某個(gè)倉庫是絕對(duì)必要的。本文稍后,,我將討論如何安裝Hudson插件,。如果您安裝了一個(gè)與SCM相關(guān)的插件,并重新啟動(dòng)Hudson,,那么在這個(gè)清單上也將出現(xiàn)一些新的選擇,。本文,我使用 Subversion ,。當(dāng)您選擇Subversion后,,將展開一個(gè)配置表單。我會(huì)在下面的某一部分中單獨(dú)描述這個(gè)配置(見“ Subversion的工作配置” ) ,。
Build after other projects are built : 此選項(xiàng)支持一條裝配(流水作業(yè))線——作業(yè)依賴: 一個(gè)作業(yè)依賴于另一個(gè)作業(yè)的輸出的情況 —— 或者如以下情形:你只是想簡單的把一些有關(guān)的工程構(gòu)建編入一個(gè)組以便一起構(gòu)建,。當(dāng)您一選擇它,你將得到一個(gè)字段,,輸入其他工程的名字[多個(gè)項(xiàng)目名間用逗號(hào)分隔]后,,這個(gè)構(gòu)建應(yīng)該就可以運(yùn)行。
Poll SCM : 這是CI 系統(tǒng)中常見的選項(xiàng),。當(dāng)您選擇此選項(xiàng),,您可以指定一個(gè)定時(shí)作業(yè)表達(dá)式來定義Hudson每隔多久檢查一下您源代碼倉庫的變化。如果發(fā)現(xiàn)變化,,就執(zhí)行一次構(gòu)建,。例如,表達(dá)式中填寫0,15,30,45 * * * *將使Hudson每隔15分鐘就檢查一次您源碼倉庫的變化,。更多信息請(qǐng)查閱Quartz CronTrigger 中關(guān)于這個(gè)定時(shí)作業(yè)語法的詳細(xì)描述,。
Build periodically : 此選項(xiàng) (也是使用定時(shí)作業(yè)表達(dá)式)僅僅通知Hudson按指定的頻率對(duì)項(xiàng)目進(jìn)行構(gòu)建,而不管SCM是否有變化,。我這個(gè)作業(yè)就屬于目標(biāo)測(cè)試環(huán)境是按某種方式定期修訂的而SCM卻是靜態(tài)的情況,。如果您想在這個(gè)作業(yè)中運(yùn)行一些測(cè)試用例的話,它可能就很有幫助,。
Add build step : 按一下這個(gè)按鈕,,添加了一項(xiàng)指令以執(zhí)行構(gòu)建腳本。您的指令可以是下列之一:
執(zhí)行 Shell
執(zhí)行 Windows 批處理
使用Ant(這是我將要使用的選項(xiàng),,在下面我會(huì)做詳細(xì)的說明)
使用Maven
Archive the artifacts : 當(dāng)您選擇此選項(xiàng),,就可以指定文件和目錄的掩碼(Ant風(fēng)格的掩碼,,可以指定包含與排除),當(dāng)與掩碼相匹配的構(gòu)件在構(gòu)建時(shí)將被添加到Hudson的構(gòu)件倉庫,,它們會(huì)用作業(yè)(名)和構(gòu)建序號(hào)來標(biāo)識(shí),。所有以前構(gòu)建過的構(gòu)件可以選擇性地丟棄,以節(jié)省您Hudson服務(wù)器上的磁盤空間,。
Record fingerprints of files to track usage : 當(dāng)您選擇此選項(xiàng),,它使用類似Ant方式的掩碼,恁可以指示Hudson去生成構(gòu)件的指紋碼,,確保您能夠更容易地找到它們的位置,,另外判斷系統(tǒng)中的這些構(gòu)件是否還在使用。
Publish javadoc : 如果您的構(gòu)建腳本能生成JavaDoc,,此選項(xiàng)將指示Hudson發(fā)布這些內(nèi)容,,而且立即把它公布在當(dāng)前工作的主頁上。每一個(gè)成功構(gòu)建的文檔內(nèi)容都可以保留,,但在默認(rèn)情況下只保留最新的,。
Publish JUnit test result report : 如果您的構(gòu)建腳本執(zhí)行了JUnit測(cè)試,此選項(xiàng)將指示Hudson處理XML測(cè)試文檔并為每次連續(xù)構(gòu)建產(chǎn)生一份可持續(xù)的報(bào)告,,依據(jù)正在進(jìn)行的測(cè)試匯總處理結(jié)果,。其結(jié)果是當(dāng)前工作主頁的一份報(bào)告,作業(yè)中的單元測(cè)試會(huì)隨著時(shí)間的推移按由老至新進(jìn)行陳列,。
Aggregate downstream test results : 在某些情況下,,作業(yè)中一組單元測(cè)試花費(fèi)的時(shí)間大大長于實(shí)際構(gòu)建它所花的時(shí)間。在這些情況下,,你可以選擇把構(gòu)建和測(cè)試分為不同的作業(yè),,以便完成構(gòu)建能相對(duì)迅速,一旦與這相關(guān)的一個(gè)或多個(gè)測(cè)試作業(yè)就執(zhí)行完畢,,構(gòu)建也就成功完成了,。 當(dāng)您選擇這個(gè)選項(xiàng), Hudson就會(huì)把構(gòu)建后作業(yè)的測(cè)試結(jié)果進(jìn)行統(tǒng)計(jì),,并且能追溯到它們的明細(xì),。用以做為本次構(gòu)建成功或失敗的主要依據(jù)。
Build other projects : 較之前面的選項(xiàng),,這個(gè)選項(xiàng)主要用來實(shí)現(xiàn)一個(gè)合乎邏輯的構(gòu)建和測(cè)試過程,它會(huì)被分為兩個(gè)或兩個(gè)以上的物理工作,,并且會(huì)按順序執(zhí)行,。當(dāng)此項(xiàng)被選擇后,您將得到一個(gè)字段,,可以在其中輸入您想在當(dāng)前作業(yè)中后執(zhí)行的其它作業(yè)名[多項(xiàng)作業(yè)可用逗號(hào)分隔],。即使目前的作業(yè)得出結(jié)論說構(gòu)建可能不穩(wěn)定,,您也可以選擇這樣做。(關(guān)于“作業(yè)的穩(wěn)定性”請(qǐng)查閱“作業(yè)狀態(tài)”章節(jié)以獲取更多信息)
E-mail notification : 當(dāng)您選擇此選項(xiàng),,您可以輸入一個(gè)或多個(gè)電子郵件地址[多個(gè)可用空格分隔],,當(dāng)Hudson完成了執(zhí)行作業(yè)后,將會(huì)給它們發(fā)送通知,。事件觸發(fā)時(shí)將產(chǎn)生一份Email,,包括構(gòu)建失敗、構(gòu)建不穩(wěn)定等,。這兒有一個(gè)額外的選項(xiàng),,當(dāng)由于用戶的錯(cuò)誤提交造成Hudson決定廢棄此次構(gòu)建,將會(huì)發(fā)送一份專門的郵件給這位SCM提交者,,以便讓他檢查源代碼,。
從網(wǎng)上抄的,可能有的地方不一樣,,但基本上還是正確的
下面針對(duì)配置說以下幾點(diǎn):
1,、JDK的選擇,之前配置好的JDK在這里可以選擇
2,、勾選 Discard Old Builds 可以輸入保存的歷史記錄(個(gè)人理解)
3,、配置代碼控制服務(wù)器,我用的是SVN
在本地搭建的代碼控制服務(wù)器,,不會(huì)的同學(xué)可以去網(wǎng)上找資料,,這里不多講了,呵呵,,我沒有啟動(dòng)http服務(wù)器,,這里直接用的svn,可以找到,,http更改沒有問題了,,其他協(xié)議沒有試過,想continuum可支持file協(xié)議(默認(rèn)是關(guān)閉的),,指向項(xiàng)目的根目錄,,如果不存在,hudson也會(huì)給出相應(yīng)的提示,,真人性化啊,,呵呵
PS:用戶名密碼暫時(shí)還不知道哪里配,知道的同學(xué)告訴我啊,,因?yàn)橄螺d代碼并不需要用戶名密碼(權(quán)限控制,,修改時(shí)需要)
Local module directory 屬性是一個(gè)可選的和額外的子目錄,它將為此次構(gòu)建創(chuàng)建一個(gè)工作區(qū),。
“Use update”復(fù)選框是很重要的,。這是Hudson準(zhǔn)備從工作區(qū)構(gòu)建執(zhí)行前先刷新Subversion倉庫以獲取最新源碼的最快捷的方式,。這一動(dòng)作是行之有效的,并在大多數(shù)情況下也相當(dāng)快,。警告 ,,如果源構(gòu)件已從倉庫刪除,工作區(qū)也會(huì)利用此步驟持續(xù)更新源碼,。另一種選擇當(dāng)然是禁用此選項(xiàng),,若是這樣,Hudson將清除工作區(qū)并從源碼倉庫中重新注入,。
最后一個(gè)選項(xiàng)是指定一個(gè)源代碼倉庫瀏覽器,,諸如FishEye或VisualSVN 。如果您擁有下面列表提供這些產(chǎn)品的一種,,就選擇適合的瀏覽器并把它指著自己的源代碼倉庫地址,。
4、指定項(xiàng)目構(gòu)建的時(shí)間間隔
根據(jù)上面給出的選項(xiàng)內(nèi)容進(jìn)行配置,,開始設(shè)置了 Build periodically,,這個(gè)設(shè)置應(yīng)該是不管代碼有沒有更新都build一次
而 Poll SCM 應(yīng)該是定時(shí)檢查是否有新的代碼更新,如果更新了就執(zhí)行build,,個(gè)人認(rèn)為
5,、指定POM.XML文件,如果項(xiàng)目中有多個(gè)POM文件,,指定根目錄POM文件,,MAVEN會(huì)自動(dòng)加載子項(xiàng)目
這里我沒有做改變,開始指定說找不到文件,,后來發(fā)現(xiàn)husdon其實(shí)講svn上的代碼下載到了工作目錄,,我的在
C:/Documents and Settings/user/.hudson/jobs/job_name/workspace 下,而且查找的POM文件通過后臺(tái)日志得知也是在這里找
所以這里我沒有改動(dòng),,成功了,,呵呵
6、配置郵件通知列表(具體人員)
定義一個(gè)郵件列表( 多項(xiàng)用空格間隔),以便當(dāng)構(gòu)建失敗時(shí)發(fā)送一份通知,。當(dāng)一次作業(yè)總是不穩(wěn)定或者被終止,,"Send email for every unstable build "就可以不選,以阻止Hudson不斷發(fā)送一份已獲知條件的郵件通知,。
以上配置完成,,點(diǎn)擊save,創(chuàng)建完成,,可在首頁中查看項(xiàng)目列表
列表中第一個(gè)圖標(biāo)表示本次build的狀態(tài),,閃爍表示進(jìn)行中,紅色表示失敗
第二個(gè)圖標(biāo)表示以往build的總體情況,成功和失敗的次數(shù)按比例分別為,,晴天,陰天,,雨天,,雷陣雨,呵呵,,有意思
最右邊的圖標(biāo)點(diǎn)擊可進(jìn)行手動(dòng)build
其他的字段英文比較直觀,,不做說明
從上面的列表中可以看出,已經(jīng)build了22次
點(diǎn)擊job名稱可以進(jìn)入對(duì)項(xiàng)目進(jìn)行詳細(xì)信息查看,,配置,,刪除等,如
沒什么說的,,大家自己研究吧
workspace里就可以找到項(xiàng)目的源碼,,以及maven打好的包,還可以下載
build失敗后,,郵件發(fā)送也正常
自己了解的暫時(shí)就這么多,,大家多多交流,:)