Continuum入門--執行個體
本文雖然是Continuum的入門,但並不涉及Continuum的曆史、下載與安裝,這些內容可以到 Continuum的官方網站 (http://maven.apache.org/continuum/) 上瞭解。本文主要是以一個執行個體來闡述使用 Continuum的基本方法,而其中將使用的Maven工程是《Maven入門--概念與執行個體》中的執行個體(該文末有下載連結)。
註:轉載時請註明原作者(jiangshachina)及出處(http://www.blogjava.net/jiangshachina)!
1 使用持續整合的好處
1.1 較早提交,經常提交
當開發人員有規律性地提交檔案時,持續整合將是最高效的。這就是意味著,不能提交不完全的代碼,而是保持每次的改動不大,並且有很好的測試。這就可以更好地發現代碼中的錯誤。
1.2 儘可能頻繁的構建
頻繁的Build可能要受到需要進行Build的工作量,以及進行Build工作的機器的效能的影響。但頻繁的Build確實可以在開發人員轉移注意力之前,儘可能早的發現錯誤。任何時候,任何一個提交的發生,Continuum都可以觸發一個Build工作。這就意味著,這些Build工作應該更快,對於大量的Build工作或效能測試
1.3 建立一個穩定的環境
如果該Build不是其它開發,測試或產品環境中的一員,那麼就可以避免定製JDK或其它的本地設定。如果在持續整合環境中,一個Build工作失敗了,它會被從引起它的原因的修改中隔離出來,可以獨立於運行環境來被使用。
1.4 運行乾淨的構建
快速、重複地構建是十分有用的,同樣重要的是,不會由於舊的Build狀態而發生失敗的Build工作。有規律的考慮問題,就能得到乾淨的構建。Continuum預設就是進行乾淨的Build工作,未來它還可以允許開發人員根據所選的時間表去請求一個初始的checkout。
2 執行個體
2.1 構想
本執行個體中需要持續整合的Maven工程是《Maven入門--概念與執行個體》中的Demo。使用的SCM是Subversion,即假定已經安裝好了Subversion伺服器和命令列用戶端。我們的目標是使用Continuum對Maven工程demo(包括它的子工程)進行定時的持續整合。在本文的環境中有如下路徑:
Continuum_Home=D:\continuum
SVN_Repoitory=E:\svn-repo\repository
Maven_Demo=D:\maven\demo
Continuum_Maven=D:\maven\continuum // 該目錄存放從Subversion下載的Maven Demo工程
2.2 初始化Subversion倉庫
產生倉庫:svnadmin create SVN_Repository
將Maven_Demo中的檔案匯入到倉庫:
svn import Maven_Demo file:///SVN_Repoitory/demo -m "initial import demo"
重新下載倉庫中的檔案(在目錄Continuum_Maven中運行如下命令):
svn checkout file:///SVN_Repoitory/demo demo
2.3 啟動Continuum
假設此時已經安裝了Continuum,但還沒有運行它。要運行Continuum,可以雙擊Continuum_Home\bin\win32\run.bat檔案。對於第一次運行,會報一些錯誤:……
WARN RDBMS - Error initialising derby schema : Schema 'SA' does not exist
ERROR 42Y07: Schema 'SA' does not exist
……
這種情況是正常的,因為Continuum後台使用的是Apache Derby資料庫,在第一次運行之前,Continuum所需要的一些表和資料並不存在。但Continuum會初始化這些資料,當第2次啟動Continuum時,這些錯誤就不會出現了。
Continuum伺服器預設使用8080連接埠,如果之前該連接埠已被佔用了,那麼啟動將失敗。為瞭解決這個問題,我們需要修改jar檔案Continuum_Home\apps\continuum-plexus-application-1.0.3.jar中的\conf\application.xml檔案。在該檔案中尋找8080(該值是唯一的),將改它為你所指定的連接埠值,本文是使用8081。經過上述過程後,Continuum伺服器應該就可以正常啟動了。下面將討論Continuum的初始化配置。
2.4 初始化配置
在瀏覽器中使用地址http://localhost:8081/continuum登入Continuum控制台介面,如所示。
第一次登入Continuum後,需要進行一些配置。主要包括使用者名稱/密碼,工作區目錄,Build輸出目錄以及公司資訊。主要參數值如下所示:
Working Directory=D:\continuum\workspace
Build Output Directory=D:\continuum\workspace\output
Base URL=http://localhost:8081/continuum/servlet/continuum
// 這裡的Company資訊就借用此Blog網站的資訊吧 *_*
Company Name=BlogJava
Company Logo=http://www.blogjava.net/images/logo.gif
Company URL=http://www.blogjava.net/
提交之後會出現如下畫面(能夠看到BlogJava的logo嗎 *_*)
使用初始配置時設定的使用者名稱及密碼,就可以登入Continuum控制台了。
2.5 修改POM檔案
在目錄Continuum_Maven中執行如下命令,將Maven工程demo重新下載一次
svn checkout file:///SVN_Repository/demo demo
為了能被Continuum使用,且能與Subversion進行配合,需要對原來Maven工程中的POM檔案進行修改。在每個POM中加入如下形式的語句:<project>
……
<ciManagement>
<system>Continuum</system>
<url>http://localhost:8081/continuum/servlet/continuum</url>
<notifiers>
<notifier>
<type>mail</type>
<address>jiangshachina@163.com</address>
</notifier>
</notifiers>
</ciManagement>
<scm>
<connection>scm:svn:file://localhost/SVN_Repository/ProjectName</connection>
</scm>
……
</project>
其中ProjectName要與POM當前所在工程名一致,如對於demo目錄中的POM,ProjectName就是demo。這三個檔案修改完畢之後,將它們都提交到Subversion伺服器中,在各個POM的目前的目錄下執行命令:
svn commit pom.xml -m "my settings"
為了每個工程都可以被單獨地運行,需要將整個demo及其子工程都安裝到Maven倉庫中,僅需要在Maven_Demo 目錄下執行命令:
mvn install
2.6 添加Maven工程
登入到Continuum控制台後,點擊左邊“Add Project”組中的“Maven 2.0+ Project”。添加Maven2工程有兩種情況:輸入POM檔案的URL;直接上傳POM檔案。前者適用於任何Maven工程;後者只能適用於沒有module,即無子工程的Maven工程。由於本文使用的Maven工程demo中有兩個子工程,所以只能使用前一種方法。
只需要載入頂層工程的POM檔案,Continuum會自動載入其它moudel的POM檔案。如所示,在M2 POM Url中輸入:
file:///D:/maven/continuum/Demo/pom.xml
提交之後會看到如下的畫面,即表示Maven工程已經被正確地載入到Continuum中了。
載入工程時,Continuum會將這些工程分別下載到Working Directory(見2.4節)中,並在 Build Output Directory(見2.4節)中為每個工程 產生一個輸出目錄(開始只有一些log檔案)。細心的朋友可能會發現,當上述工作完成之後,子工程“CE Maven Demo – App”和“CE Maven Demo – WebApp”的Build狀態仍然是“Queued Build”。其實這是Continuum的一個Bug!Continnum在許多情況下不會自動重新整理頁面,需要手動重新整理,即點擊“Show projects”按鈕。但請不要使用瀏覽器中的refresh按鈕,這樣可能會重新提交你的請求。這個Bug將在Continuum1.1中被修複。當頁面重新整理之後,App和WebApp的Build狀態將與Demo工程一致。
2.7 第一次Build
要Build任何一個Maven工程都十分簡單,只需要點擊某個工程右邊“Build Now”按鈕就可以Build該工程了。如我們點擊demo工程對應的“Build Now”按鈕,那麼Continuum將按照demo中的POM檔案執行Build工作。當Build完成後,可以顯示本次Build的結果狀態:成功,失敗或錯誤(但請隨時手動重新整理頁面^_^)。而Build次數也將從0改變為1。
點擊表格中的列“Build”中的數字,將可以看到本次Build的詳細過程,如所示。
2.8 設定時間表
前面已經談過,持續整合就需要進行有規律的Build。即需要建立一個時間表,讓持續整合伺服器按照這個表進行Build。Continuum預設的時間表為:每天的每一個整點進行一次Build,即每天每隔一小時Build一次。我們也可以建立自己的時間表。點擊Administration組中的“Schedules”按鈕就可以發現當前預設使用的時間表,再點擊“Add”按鈕就可以添加新的時間表了,如所示。
這些參數項中最關鍵的是Cron Expression,它定義了Continuum執行Build的時間規則,它的文法規則請見參加資源[4]。中規定的時間表是:在每天的14:00-14:59之間,每分鐘都要進行一次Build。勾選上Enable複選框之後,再提交,該Schedule就可以被使用了。
為了使用建立的Schedule,我們需要進入工程視圖頁面。點擊“Show Projects”-->工程名(如CE Maven Demo),就可以看到該工程的詳細資料,如所示。
在工程視圖的Build Definitions項的Goals中可以發現,使用的Schedule就是“DEFAULT_SCHEDULE”時間表。再點擊“Add”按鈕,並在Schedule下拉式清單方塊中,請選擇剛剛建立的“My First Schedule”時間表(如所示),最後再提交後,新的時間表將被採用。
4 小結
根據前面的描述,應該可以對Continuum的使用有些感性上的認識了。由於Continuum是Maven的子項目,它內建支援Maven2,所以能夠與Maven進行良好的整合使用。現時,Continuum也能夠支援Ant與Shell指令碼工程。使用Continuum+Maven,能夠對工程進行乾淨與頻繁的整合,可以提高Build效率並能促進工程的健康發展。
5 參數資源
[1]Continuum官方網站. http://maven.apache.org/continuum/
[2]Continuum的參考文檔. http://maven.apache.org/continuum/guides/index.html
[3]Better Build with Maven. http://www.mergere.com/m2book_download.jsp
[4]Cron Expression文法規則. http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html