在上一篇項目管理實踐二、源代碼控制【Source Control Using VisualSVN Server and TortoiseSVN】中我們已經講解了如何使用TortoiseSVN和VisualSVN Server來做簡單的版本控制,這一篇我們將會講解使用CruiseControl.NET和MSBuild來搭建每日構建系統。
在第一篇項目管理實踐一、工欲善其事,必先利其器 中我們已經安裝了CruiseControl.NET 1.4,因爲我們還要用到MSBuild,所以如果你的系統沒有安裝Visual Studio,那麼你需要首先安裝Visual Studio 2005/2008,我們在這裏使用的是Visual Studio 2008,準備好這些了嗎?OK,我們正式開始今天的課程!
首先,我們要配置CruiseControl.NET【下面簡寫爲CCNET】,配置完成後,我們每次提交源代碼到SVN服務器後,CCNET就可以自動從SVN服務器上籤出源代碼,並調用MSBuild自動進行編譯。我們以昨天的教程中創建的StartKit項目爲實例,先看看下面的配置文件:
CCNET配置文件代碼
1 <cruisecontrol xmlns:cb="urn:ccnet.config.builder">
2 <!--項目名稱-->
3 <name>StartKit</name>
4 <!--標示類型,有多種類型。下面爲默認標示,作爲每次編譯時生成的日誌文件的名稱-->
5 <labeller type="defaultlabeller">
6 <!--前綴-->
7 <prefix>StartKit-1-</prefix>
8 <!--編譯失敗時是否增加-->
9 <incrementOnFailure>false</incrementOnFailure>
10 <!--格式-->
11 <labelFormat>00000</labelFormat>
12 </labeller>
13 <!--項目的WebDashboard地址,CruiseControl.NET包括二部分,一是Server用來配置項目和監視文件修改,二是WebDashboard,是一個顯示項目信息及編譯信息的Website-->
14 <webURL>http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx</webURL>
15 <!--觸發器,包含多種,有興趣可以查看官方文檔-->
16 <triggers>
17 <!--時間間隔觸發器,下面是60秒觸發一次-->
18 <intervalTrigger seconds="60" />
19 </triggers>
20 <!--如果發現修改,延遲多久開始編譯,下面是2秒-->
21 <modificationDelaySeconds>2</modificationDelaySeconds>
22 <!--源代碼控制系統,支持多種,有興趣可以查看官方文檔,下面採用svn-->
23 <sourcecontrol type="svn">
24 <!--源代碼在SVN服務器上的路徑-->
25 <trunkUrl>http://zt.net.henu.edu.cn/svn/StartKit/StartKit/</trunkUrl>
26 <!--svn服務器所在路徑,在這裏就是VisualSVN Server安裝目錄中的bin目錄下的svn.exe -->
27 <executable>C:/Program Files/VisualSVN Server/bin/svn.exe</executable>
28 <!--用來遷出源代碼的用戶名,svn服務器進行驗證-->
29 <username>starter</username>
30 <!--用來遷出源代碼的用戶名對應的密碼-->
31 <password>123456</password>
32 <!--web獲取源代碼的地址,類似於開源網站上瀏覽代碼的那部分功能,這裏的類型是trac-->
33 <!--<webUrlBuilder type="trac">
34 <!--trac中對應項目的地址¬-->
35 <tracProjectUrl>http://svn.net.henu.edu.cn/pojects/StartKit/</tracProjectUrl>
36 <!--trac中對應項目的源代碼庫地址,相對於上面的路徑-->
37 <tracRepositoryRoot>/StartKit</tracRepositoryRoot>
38 </webUrlBuilder>-->
39 </sourcecontrol>
40 <!--該節點用來配置具體執行那些任務-->
41 <tasks>
42 <!--msbuild任務配置,用來編譯項目-->
43 <msbuild>
44 <!--MSBuild.exe的路徑-->
45 <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
46 <!--從SVN遷出的源代碼的存放位置,可以不配置,下面的即爲默認值 -->
47 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
48 <workingDirectory>D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory</workingDirectory>
49 <!--對這個項目的監控過程的日誌記錄目錄,可以不配置,下面的即爲默認值-->
50 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
51 <artifactDirectory> D:\Program Files\CruiseControl.NET\server\StartKit\ Artifacts</artifactDirectory>
52 <!--要編譯的項目名稱 -->
53 <projectFile>StartKit.sln</projectFile>
54 <!-- MSBuild編譯時的參數,具體參數信息可以查看MSDN上的說明-->
55 <buildArgs>/p:configuration=debug</buildArgs>
56 <!--指定日誌記錄模塊-->
57 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
58 <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
59 <!--編譯目標-->
60 <targets />
61 </msbuild>
62 <!--在這裏還可以添加其他的程序,比如運行測試、部署項目等等-->
63 </tasks>
64 <!--項目編譯狀態信息的保存位置-->
65 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
66 <state type="state" directory="D:\Program Files\CruiseControl.NET\server\CCState" />
67 <!--發佈和部署配置-->
68 <publishers>
69 <!--如果編譯成功,那麼下面的配置,會將源代碼複製到指定目錄HistoryVersion下,名稱爲版本標識(自動增長,labeller配置)的子目錄下-->
70 <buildpublisher>
71 <!--源代碼路徑-->
72 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
73 <sourceDir> D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </sourceDir>
74 <!--編譯成功後保存源代碼到該目錄下名稱爲版本標示labeller的目錄中-->
75 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
76 <publishDir> D:\Program Files\CruiseControl.NET\server\StartKit\HistoryVersion </publishDir>
77 </buildpublisher>
78 <!--該節點用來配置合併多個文件,當時有外部插件時,要把他們分別產生的輸出文件合併-->
79 <merge>
80 <!--要合併的文件,合併後的信息可以顯示在Web Dashboard和郵件通知裏-->
81 <files>
82 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
83 <file>D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory\results.xml</file>
84 </files>
85 </merge>
86 <!--源代碼路徑-->
87 <xmllogger />
88 <!--顯示歷史修改記錄列表, 在Web Dashboard中可以查看-->
89 <modificationHistory />
90 <!--所有編譯信息的統計, 在Web Dashboard中可以查看-->
91 <statistics />
92 <!--郵件通知配置,每次編譯後,都會郵件通知下面配置中添加的用戶-->
93 <!-- mailhost是發送郵件的主機,mailport是郵件發送端口,mailhostUsername發送郵件的郵箱用戶名,mailhostPassword發送郵件的郵箱密碼,from希望顯示在發件人中的郵箱地址, includeDetails郵件內容是否包含詳細的編譯信息 -->
94 <email mailhost="smtp.qq.com" mailport="25"
95 mailhostUsername="******" mailhostPassword="******" from="******@qq.com" includeDetails="true">
96 <!--接收郵件通知的用戶 -->
97 <users>
98 <!--name是SVN服務器上存在的用戶名,group是SVN服務器上存在的組,address是該用戶的郵箱地址 -->
99 <user name="zt" group="StartKit" address="******[email protected]" />
100 <user name="***" group="StartKit" address="******[email protected]" />
101 <user name="***" group="StartKit" address="******[email protected]" />
102 </users>
103 <!--接收郵件通知的組-->
104 <groups>
105 <!--name必須是SVN服務器上存在的組,notification是什麼時候發送通知,可選有Always/Success/Change/Fixed/Failed -->
2 <!--項目名稱-->
3 <name>StartKit</name>
4 <!--標示類型,有多種類型。下面爲默認標示,作爲每次編譯時生成的日誌文件的名稱-->
5 <labeller type="defaultlabeller">
6 <!--前綴-->
7 <prefix>StartKit-1-</prefix>
8 <!--編譯失敗時是否增加-->
9 <incrementOnFailure>false</incrementOnFailure>
10 <!--格式-->
11 <labelFormat>00000</labelFormat>
12 </labeller>
13 <!--項目的WebDashboard地址,CruiseControl.NET包括二部分,一是Server用來配置項目和監視文件修改,二是WebDashboard,是一個顯示項目信息及編譯信息的Website-->
14 <webURL>http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx</webURL>
15 <!--觸發器,包含多種,有興趣可以查看官方文檔-->
16 <triggers>
17 <!--時間間隔觸發器,下面是60秒觸發一次-->
18 <intervalTrigger seconds="60" />
19 </triggers>
20 <!--如果發現修改,延遲多久開始編譯,下面是2秒-->
21 <modificationDelaySeconds>2</modificationDelaySeconds>
22 <!--源代碼控制系統,支持多種,有興趣可以查看官方文檔,下面採用svn-->
23 <sourcecontrol type="svn">
24 <!--源代碼在SVN服務器上的路徑-->
25 <trunkUrl>http://zt.net.henu.edu.cn/svn/StartKit/StartKit/</trunkUrl>
26 <!--svn服務器所在路徑,在這裏就是VisualSVN Server安裝目錄中的bin目錄下的svn.exe -->
27 <executable>C:/Program Files/VisualSVN Server/bin/svn.exe</executable>
28 <!--用來遷出源代碼的用戶名,svn服務器進行驗證-->
29 <username>starter</username>
30 <!--用來遷出源代碼的用戶名對應的密碼-->
31 <password>123456</password>
32 <!--web獲取源代碼的地址,類似於開源網站上瀏覽代碼的那部分功能,這裏的類型是trac-->
33 <!--<webUrlBuilder type="trac">
34 <!--trac中對應項目的地址¬-->
35 <tracProjectUrl>http://svn.net.henu.edu.cn/pojects/StartKit/</tracProjectUrl>
36 <!--trac中對應項目的源代碼庫地址,相對於上面的路徑-->
37 <tracRepositoryRoot>/StartKit</tracRepositoryRoot>
38 </webUrlBuilder>-->
39 </sourcecontrol>
40 <!--該節點用來配置具體執行那些任務-->
41 <tasks>
42 <!--msbuild任務配置,用來編譯項目-->
43 <msbuild>
44 <!--MSBuild.exe的路徑-->
45 <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
46 <!--從SVN遷出的源代碼的存放位置,可以不配置,下面的即爲默認值 -->
47 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
48 <workingDirectory>D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory</workingDirectory>
49 <!--對這個項目的監控過程的日誌記錄目錄,可以不配置,下面的即爲默認值-->
50 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
51 <artifactDirectory> D:\Program Files\CruiseControl.NET\server\StartKit\ Artifacts</artifactDirectory>
52 <!--要編譯的項目名稱 -->
53 <projectFile>StartKit.sln</projectFile>
54 <!-- MSBuild編譯時的參數,具體參數信息可以查看MSDN上的說明-->
55 <buildArgs>/p:configuration=debug</buildArgs>
56 <!--指定日誌記錄模塊-->
57 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
58 <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,D:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
59 <!--編譯目標-->
60 <targets />
61 </msbuild>
62 <!--在這裏還可以添加其他的程序,比如運行測試、部署項目等等-->
63 </tasks>
64 <!--項目編譯狀態信息的保存位置-->
65 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
66 <state type="state" directory="D:\Program Files\CruiseControl.NET\server\CCState" />
67 <!--發佈和部署配置-->
68 <publishers>
69 <!--如果編譯成功,那麼下面的配置,會將源代碼複製到指定目錄HistoryVersion下,名稱爲版本標識(自動增長,labeller配置)的子目錄下-->
70 <buildpublisher>
71 <!--源代碼路徑-->
72 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
73 <sourceDir> D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory </sourceDir>
74 <!--編譯成功後保存源代碼到該目錄下名稱爲版本標示labeller的目錄中-->
75 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
76 <publishDir> D:\Program Files\CruiseControl.NET\server\StartKit\HistoryVersion </publishDir>
77 </buildpublisher>
78 <!--該節點用來配置合併多個文件,當時有外部插件時,要把他們分別產生的輸出文件合併-->
79 <merge>
80 <!--要合併的文件,合併後的信息可以顯示在Web Dashboard和郵件通知裏-->
81 <files>
82 <!--我這裏的CruiseControl.NET 安裝在D盤,你們使用時候,改成自己的安裝路徑即可-->
83 <file>D:\Program Files\CruiseControl.NET\server\StartKit\WorkingDirectory\results.xml</file>
84 </files>
85 </merge>
86 <!--源代碼路徑-->
87 <xmllogger />
88 <!--顯示歷史修改記錄列表, 在Web Dashboard中可以查看-->
89 <modificationHistory />
90 <!--所有編譯信息的統計, 在Web Dashboard中可以查看-->
91 <statistics />
92 <!--郵件通知配置,每次編譯後,都會郵件通知下面配置中添加的用戶-->
93 <!-- mailhost是發送郵件的主機,mailport是郵件發送端口,mailhostUsername發送郵件的郵箱用戶名,mailhostPassword發送郵件的郵箱密碼,from希望顯示在發件人中的郵箱地址, includeDetails郵件內容是否包含詳細的編譯信息 -->
94 <email mailhost="smtp.qq.com" mailport="25"
95 mailhostUsername="******" mailhostPassword="******" from="******@qq.com" includeDetails="true">
96 <!--接收郵件通知的用戶 -->
97 <users>
98 <!--name是SVN服務器上存在的用戶名,group是SVN服務器上存在的組,address是該用戶的郵箱地址 -->
99 <user name="zt" group="StartKit" address="******[email protected]" />
100 <user name="***" group="StartKit" address="******[email protected]" />
101 <user name="***" group="StartKit" address="******[email protected]" />
102 </users>
103 <!--接收郵件通知的組-->
104 <groups>
105 <!--name必須是SVN服務器上存在的組,notification是什麼時候發送通知,可選有Always/Success/Change/Fixed/Failed -->
106 <group name="StartKit " notification="always" />
107 </groups>
108 </email>
109 </publishers>
110 </project>
111 <!--可以同時添加多個項目
112 <project >
113 <name>test</name>
114 ……
115 </project>
116 -->
117 </cruisecontrol>
108 </email>
109 </publishers>
110 </project>
111 <!--可以同時添加多個項目
112 <project >
113 <name>test</name>
114 ……
115 </project>
116 -->
117 </cruisecontrol>
好了,我們已經對CCNET的配置文件有了大致的瞭解,接下來,你打開CCNET的安裝路徑,找到子目錄server下的ccnet.config文件,把上面的配置信息Copy到ccnet.config文件中,記得把配置文件中的一些路徑修改爲自己的實際路徑啊,修改好後,保存。這時候,檢查Windows服務CruiseControl.NET Server是否啓動,如果沒有則啓動它,啓動該服務後,打開瀏覽在地址欄輸入上面配置文件中的webUrl地址:http://202.196.96.55:8080/server/local/project/StartKit/ViewProjectReport.aspx 也可以直接輸入http://202.196.96.55:8080/server/ ,這裏是演示地址,要根據自己的實際情況修改爲正確的地址,OK,看到類似下圖的效果,好了,搞定!如果你遇到了什麼麻煩,請在下面留言,我一定會及時回覆!
點擊StartKit,轉入下圖所示的頁面:
OK,到這裏,我們提交更新到SVN服務器後,CCNET就會根據我們配置自動編譯項目,而且我們也可以通過Web Dashboard來查看具體的編譯信息了,提示如果配置了郵件發送,那麼我們還可以通過郵件收到詳細的編譯信息,怎麼樣?夠方便吧!
其實,CCNET的功能是相當強大的,上面只是最常用的配置,其他還有很多非常好的功能。你想知道嗎?那你可以在這裏查看CCNET官方文檔 ,實際上,你安裝CCNET後,文檔也已經安裝到你的電腦了,在CCNET的安裝目錄下的webdashboard的子目錄doc中就是。
下面我簡單講一下,如何使用CruiseControl.NET Tray【以下簡稱CCTray】來監視每次提交後的編譯狀態。
安裝好打開CCTray後,運行CCTray程序,點擊左上角的菜單File下的Settings…,如下圖:
點擊Settings…會彈出下面的窗體:
切換到Build Projects選項卡,如下圖:
點擊Add…按鈕,添加我們的CCNET服務器,如下圖:
輸入我們的CCNET服務器後,CCNET服務器上的項目就會在右側顯示出來,如下圖:
選中右側的項目後,點擊OK按鈕,返回CCTray打開時的界面,我們的二個項目已經添加進來了,如下圖:
我們在桌面的右下角的任務欄,可以看到如下圖所示的圖標:
綠色的那個標示就是CCTray的標示,綠色表示所有的項目都通過了編譯,紫紅色表示至少有一個項目沒有通過編譯,橘黃色表示有項目正在編譯,橘紅色表示有項目被強制編譯,顯示爲灰色則說明和CCNET服務器失去了鏈接。
OK,大家可以使用CCTray實時監視提交更新後項目的編譯狀態了。
如果大家有什麼問題,歡迎和我交流!
其實,CCNET的功能是相當強大的,上面只是最常用的配置,其他還有很多非常好的功能。你想知道嗎?那你可以在這裏查看CCNET官方文檔 ,實際上,你安裝CCNET後,文檔也已經安裝到你的電腦了,在CCNET的安裝目錄下的webdashboard的子目錄doc中就是。
下面我簡單講一下,如何使用CruiseControl.NET Tray【以下簡稱CCTray】來監視每次提交後的編譯狀態。
安裝好打開CCTray後,運行CCTray程序,點擊左上角的菜單File下的Settings…,如下圖:
點擊Settings…會彈出下面的窗體:
切換到Build Projects選項卡,如下圖:
點擊Add…按鈕,添加我們的CCNET服務器,如下圖:
輸入我們的CCNET服務器後,CCNET服務器上的項目就會在右側顯示出來,如下圖:
選中右側的項目後,點擊OK按鈕,返回CCTray打開時的界面,我們的二個項目已經添加進來了,如下圖:
我們在桌面的右下角的任務欄,可以看到如下圖所示的圖標:
綠色的那個標示就是CCTray的標示,綠色表示所有的項目都通過了編譯,紫紅色表示至少有一個項目沒有通過編譯,橘黃色表示有項目正在編譯,橘紅色表示有項目被強制編譯,顯示爲灰色則說明和CCNET服務器失去了鏈接。
OK,大家可以使用CCTray實時監視提交更新後項目的編譯狀態了。
如果大家有什麼問題,歡迎和我交流!