在上一篇項目管理實踐教程二、源代碼控制【Source Control Using VisualSVN Server and TortoiseSVN】中我們已經講解了如何使用TortoiseSVN和VisualSVN Server來做簡單的版本控制,這一篇我們將會講解使用CruiseControl.NET和MSBuild來搭建每日構建系統。
在第一篇項目管理實踐教程一、工欲善其事,必先利其器【Basic Tools】 中我們已經安裝了CruiseControl.NET 1.4,因爲我們還要用到MSBuild,所以如果你的系統沒有安裝Visual Studio,那麼你需要首先安裝Visual Studio 2005/2008,我們在這裏使用的是Visual Studio 2008,準備好這些了嗎?OK,我們正式開始今天的課程!
首先,我們要配置CruiseControl.NET【下面簡寫爲CCNET】,配置完成後,我們每次提交源代碼到SVN服務器後,CCNET就可以自動從SVN服務器上遷出源代碼,並調用MSBuild自動進行編譯。我們以昨天的教程中創建的StartKit項目爲實例,先看看下面的配置文件:
- <cruisecontrol xmlns:cb="urn:ccnet.config.builder">
- <!--項目名稱-->
- <name>StartKit</name>
- <!--標示類型,有多種類型。下面爲默認標示,作爲每次編譯時生成的日誌文件的名稱-->
- <labeller type="defaultlabeller">
- <!--前綴-->
- <prefix>StartKit-1-</prefix>
- <!--編譯失敗時是否增加-->
- <incrementOnFailure>false</incrementOnFailure>
- <!--格式-->
- <labelFormat>00000</labelFormat>
- </labeller>
- <!--項目的WebDashboard地址,CruiseControl.NET包括二部分,一是Server用來配置項目和監視文件修改,二是WebDashboard,是一個顯示項目信息及編譯信息的Website-->
- <webURL>http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx</webURL>
- <!--觸發器,包含多種,有興趣可以查看官方文檔-->
- <triggers>
- <!--時間間隔觸發器,下面是60秒觸發一次-->
- <intervalTrigger seconds="60" />
- </triggers>
- <!--如果發現修改,延遲多久開始編譯,下面是2秒-->
- <modificationDelaySeconds>2</modificationDelaySeconds>
- <!--源代碼控制系統,支持多種,有興趣可以查看官方文檔,下面採用svn-->
- <sourcecontrol type="svn">
- <!--源代碼在SVN服務器上的路徑-->
- <trunkUrl>http://zt.net.henu.edu.cn/svn/StartKit/StartKit/</trunkUrl>
- <!--svn服務器所在路徑,在這裏就是VisualSVN Server安裝目錄中的bin目錄下的svn.exe -->
- <executable>C:/Program Files/VisualSVN Server/bin/svn.exe</executable>
- <!--用來遷出源代碼的用戶名,svn服務器進行驗證-->
- <username>starter</username>
- <!--用來遷出源代碼的用戶名對應的密碼-->
- <password>123456</password>
- <!--web獲取源代碼的地址,類似於開源網站上瀏覽代碼的那部分功能,這裏的類型是trac-->
- <!--<webUrlBuilder type="trac">
- <!--trac中對應項目的地址¬-->
- <tracProjectUrl>http://svn.net.henu.edu.cn/pojects/StartKit/</tracProjectUrl>
- <!--trac中對應項目的源代碼庫地址,相對於上面的路徑-->
- <tracRepositoryRoot>/StartKit</tracRepositoryRoot>
- </webUrlBuilder>-->
- </sourcecontrol>
- <!--該節點用來配置具體執行那些任務-->
- <tasks>
- <!--msbuild任務配置,用來編譯項目-->
- <msbuild>
- <!--MSBuild.exe的路徑-->
- <executable>C:/WINDOWS/Microsoft.NET/Framework/v3.5/MSBuild.exe</executable>
- <!--從SVN遷出的源代碼的存放位置,可以不配置,下面的即爲默認值 -->
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <workingDirectory>D:/Program Files/CruiseControl.NET/server/StartKit/WorkingDirectory</workingDirectory>
- <!--對這個項目的監控過程的日誌記錄目錄,可以不配置,下面的即爲默認值-->
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <artifactDirectory> D:/Program Files/CruiseControl.NET/server/StartKit/ Artifacts</artifactDirectory>
- <!--要編譯的項目名稱 -->
- <projectFile>StartKit.sln</projectFile>
- <!-- MSBuild編譯時的參數,具體參數信息可以查看MSDN上的說明-->
- <buildArgs>/p:configuration=debug</buildArgs>
- <!--指定日誌記錄模塊-->
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:/Program Files/CruiseControl.NET/server/ThoughtWorks.CruiseControl.MsBuild.dll</logger>
- <!--編譯目標-->
- <targets />
- </msbuild>
- <!--在這裏還可以添加其他的程序,比如運行測試、部署項目等等-->
- </tasks>
- <!--項目編譯狀態信息的保存位置-->
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <state type="state" directory="D:/Program Files/CruiseControl.NET/server/CCState" />
- <!--發佈和部署配置-->
- <publishers>
- <!--如果編譯成功,那麼下面的配置,會將源代碼複製到指定目錄HistoryVersion下,名稱爲版本標識(自動增長,labeller配置)的子目錄下-->
- <buildpublisher>
- <!--源代碼路徑-->
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <sourceDir> D:/Program Files/CruiseControl.NET/server/StartKit/WorkingDirectory </sourceDir>
- <!--編譯成功後保存源代碼到該目錄下名稱爲版本標示labeller的目錄中-->
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <publishDir> D:/Program Files/CruiseControl.NET/server/StartKit/HistoryVersion </publishDir>
- </buildpublisher>
- <!--該節點用來配置合併多個文件,當時有外部插件時,要把他們分別產生的輸出文件合併-->
- <merge>
- <!--要合併的文件,合併後的信息可以顯示在Web Dashboard和郵件通知裏-->
- <files>
- <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
- <file>D:/Program Files/CruiseControl.NET/server/StartKit/WorkingDirectory/results.xml</file>
- </files>
- </merge>
- <!--源代碼路徑-->
- <xmllogger />
- <!--顯示歷史修改記錄列表, 在Web Dashboard中可以查看-->
- <modificationHistory />
- <!--所有編譯信息的統計, 在Web Dashboard中可以查看-->
- <statistics />
- <!--郵件通知配置,每次編譯後,都會郵件通知下面配置中添加的用戶-->
- <!-- mailhost是發送郵件的主機,mailport是郵件發送端口,mailhostUsername發送郵件的郵箱用戶名,mailhostPassword發送郵件的郵箱密碼,from希望顯示在發件人中的郵箱地址, includeDetails郵件內容是否包含詳細的編譯信息 -->
- <email mailhost="smtp.qq.com" mailport="25"
- mailhostUsername="******" mailhostPassword="******" from="******@qq.com" includeDetails="true">
- <!--接收郵件通知的用戶 -->
- <users>
- <!--name是SVN服務器上存在的用戶名,group是SVN服務器上存在的組,address是該用戶的郵箱地址 -->
- <user name="zt" group="StartKit" address="******[email protected]" />
- <user name="***" group="StartKit" address="******[email protected]" />
- <user name="***" group="StartKit" address="******[email protected]" />
- </users>
- <!--接收郵件通知的組-->
- <groups>
- <!--name必須是SVN服務器上存在的組,notification是什麼時候發送通知,可選有Always/Success/Change/Fixed/Failed -->
- <group name="StartKit " notification="always" />
- </groups>
- </email>
- </publishers>
- </project>
- <!--可以同時添加多個項目
- <project >
- <name>test</name>
- ……
- </project>
- -->
- </cruisecontrol>
點擊StartKit,轉入下圖所示的頁面:
OK,到這裏,我們提交更新到SVN服務器後,CCNET就會根據我們配置自動編譯項目,而且我們也可以通過Web Dashboard來查看具體的編譯信息了,提示如果配置了郵件發送,那麼我們還可以通過郵件收到詳細的編譯信息,怎麼樣?夠方便吧!
其實,CCNET的功能是相當強大的,上面只是最常用的配置,其他還有很多非常好的功能。你想知道嗎?那你可以在這裏查看CCNET官方文檔 ,實際上,你安裝CCNET後,文檔也已經安裝到你的電腦了,在CCNET的安裝目錄下的webdashboard的子目錄doc中就是。
好了,我們今天的教程就到這裏,本來我應該把如何使用CruiseControl.NET Tray來監視每次更新後的編譯狀態,但是今天真的太晚了,明天還要做項目,所以我明天補上,請大家見諒!
補充部分:
下面我簡單講一下,如何使用CruiseControl.NET Tray【以下簡稱CCTray】來監視每次提交後的編譯狀態。
安裝好打開CCTray後,運行CCTray程序,點擊左上角的菜單File下的Settings…,如下圖:
點擊Settings…會彈出下面的窗體:
切換到Build Projects選項卡,如下圖:
點擊Add…按鈕,添加我們的CCNET服務器,如下圖:
輸入我們的CCNET服務器後,CCNET服務器上的項目就會在右側顯示出來,如下圖:
選中右側的項目後,點擊OK按鈕,返回CCTray打開時的界面,我們的二個項目已經添加進來了,如下圖:
我們在桌面的右下角的任務欄,可以看到如下圖所示的圖標:
綠色的那個標示就是CCTray的標示,綠色表示所有的項目都通過了編譯,紫紅色表示至少有一個項目沒有通過編譯,橘黃色表示有項目正在編譯,橘紅色表示有項目被強制編譯,顯示爲灰色則說明和CCNET服務器失去了鏈接。
OK,大家可以使用CCTray實時監視提交更新後項目的編譯狀態了。
如果大家有什麼問題,歡迎和我交流!