根據實踐的需要,為實作VSS+MsBuild2.0+CCnet這種組合的搭配,持續內建伺服器(CI伺服器)首先需要安裝MicrosoftVisual SourceSafe ,Freamwork2.0,IIS;三者缺一不可。
裝好以上這些之後,就輕按兩下ccnet的安裝程式,安裝即可。在windows2003上面安裝過程正常。安裝的時候不要去更改它的預設位址,更改了之後,發現啟動不了。安裝在預設位址下,啟動就正常。我在在windows 2008伺服器上安裝時提示:ASP設定不了,請安裝完成後再去設定,但是後來發現不設定也沒有問題。
裝好之後,在程式中可以找到,如下圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2Zu0GUHpXN1gzNwATOxMTMfBzLclTMvwFMxETMwIzLcRnbl1GajFGd0F2LcRXZu5ibkN3YukGavw1LcpDc0RHaiojIsJye.gif)
使用ccnet工作的前提條件是需要将ccnet.config檔案配置正确。CCValidator這個小程式就是用來驗證ccnet.config中配置的内容是否有他認識不了的地方。應該是做一個文法的檢查。
在CI伺服器這個位址C:\ProgramFiles\CruiseControl.NET\server\ccnet.config。
找到ccnetconfig檔案,打開你會看到這樣一行字<!-- This is yourCruiseControl.NET Server Configuration file. Add your projects below! --> ,就從這裡開始吧。
<?xml version="1.0" encoding="utf-8"?>
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<!-- This is your CruiseControl.NET Server Configuration file. Add your projects below! -->
<!—持續內建的一個特定項目,一個project之間都是對此項目的設定,一個ccnet.config檔案可以配置多個項目-->
<project name="項目1" >
<!—項目1內建的工作目錄-->
<workingDirectory>D:\ccnet</workingDirectory>
<!—項目1內建的中間臨時檔案的存儲目錄-->
<artifactDirectory>D:\ccnet</artifactDirectory>
<!—給每一次的內建的結果按照時間+流水取名,便于檢視-->
<labeller type="dateLabeller" />
<!—1.源碼庫的配置-->
<!—2.觸發器trigger的配置-->
<!—3.MsBuild2.0的配置-->
<!—4.publisher的配置-->
<!—5.其它-->
</project>
</cruisecontrol>
以上是我所使用的ccnet.config檔案的塊的組成;以下按照編号對各塊進行說明。
1.源碼庫的配置
<!--源碼控制類型,此處必填vss-->
<sourcecontrol type="vss">
<!--如果作業系統(中文)與sourcesafe安裝的語言(英文)不一樣的話就會出現檢測不出來源碼的變更的情況,加上此設定可以避免此類問題-->
<culture>en-US</culture>
<autoGetSource>true</autoGetSource>
<!--源碼庫中的項目的位址--> <project>$/*****/*****/版本控制庫/代碼/項目1</project>
<alwaysGetLatest>true</alwaysGetLatest>
<!--vss使用者名-->
<username>user1</username>
<!--vss密碼-->
<password>password1</password>
<!--vss伺服器所在的路徑-->
<ssdir>\\192.168.1.2\vss\項目1</ssdir>
<!--工作目錄,可以使用相對目錄,以上面的workingDirectory為準-->
<workingDirectory>D:\ECMS</workingDirectory>
</sourcecontrol>
2.觸發器trigger的配置
<triggers>
<!--定時任務,可以設定在哪天的那個時間執行建構計劃-->
<scheduleTrigger time="21:00" buildCondition="ForceBuild">
<!--以下配置節有指定,則會在指定的時間日期内執行,沒有則每天執行,這裡沒有指定-->
<!--<weekDays>Monday, Tuesday</weekDays>-->
</scheduleTrigger>
<!--每天21:30-23:59以及00:00-08:20不執行-->
<filterTrigger startTime="21:30" endTime="08:20">
<!--每隔多少時間執行一次-->
<!--intervalTrigger觸發器的名字叫做 continuous, 每30秒鐘去檢查一下源代碼控制器上面是否有變更,如果有變更就觸發一次持續內建,從檢查到變更的時間開始靜默60秒鐘,然後才去源代碼伺服器上面去拉代碼-->
<trigger type = "intervalTrigger" name="continuous" seconds="30" buildCondition="IfModificationExists" initialSeconds="60" /> </filterTrigger> </triggers>
3.MsBuild2.0的配置 <tasks> <msbuild>
<!--msbuild的路徑,一般在系統目錄下-->
<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
<workingDirectory>D:\項目1\workingDirectory</workingDirectory>
<!--MSBuild會找到檔案,并對它進行編譯;一般使用解決方案檔案,但是這個項目有點特别,是以使用了項目檔案-->
<projectFile>D:\項目1\UI\cctest\cctest.csproj</projectFile>
<!--編譯參數-->
<!--<buildArgs>/p:Configuration=Release /v:diag</buildArgs>-->
<!--<buildArgs></buildArgs>-->
<!--編譯的目錄類型-->
<!--<targets></targets>-->
<!--過期時間-->
<!--項目太大的時候,這個過期時間一定要設到足夠長,否則編譯不完,ccnet就把它殺死了,導緻編譯不能成功-->
<timeout>1800</timeout>
<!--記錄編譯的詳細日志,需要單獨下載下傳這個程式集,放在工作目錄(workingDirectory)下,我一直沒搞清楚要放在哪個工作目錄,總之每個都放一個好了,放好了之後,就能記錄編譯的詳細日志了-->
<logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
</tasks>
4.publisher的配置 publisher塊一定不能放到<tasks></tasks>塊中去,一定要放在<tasks></tasks>的外面才可以正确的發送郵件出來。隻要将發送伺服器位址,smpt的位址,收件人的位址設定正确就可以了 <publishers>
<xmllogger logDir="D:\ccnet\buildlogs" />
<email mailport="25" includeDetails="TRUE" mailhostUsername="[email protected]****.com" mailhostPassword="password" useSSL="FALSE">
<from>[email protected]****.com</from>
<mailhost>smtp.****.com</mailhost>
<users>
<user name="danqueen" group="buildmaster" address="[email protected]****.com" />
<user name="developer" group="developers" address="[email protected]****.com" />
</users>
<groups>
<group name="developers">
<notifications>
<notificationType>Failed</notificationType>
<notificationType>Fixed</notificationType>
</notifications>
</group>
<group name="buildmaster">
<notifications>
<notificationType>Always</notificationType>
</notifications>
</group>
</groups>
<!--
<converters>
<regexConverter find="{1}quot; replace="@TheCompany.com" />
</converters>-->
<modifierNotificationTypes>
<NotificationType>Failed</NotificationType>
<NotificationType>Fixed</NotificationType>
</modifierNotificationTypes>
<subjectSettings>
<subject buildResult="StillBroken" value="Build is still broken for ${CCNetProject},the fix failed." />
<subject buildResult="Broken" value="${CCNetProject} broke at ${CCNetBuildDate} ${CCNetBuildTime} , last checkin(s) by ${CCNetFailureUsers}" />
<subject buildResult="Exception" value="Serious problem for ${CCNetProject}, it is now in Exception! Check status of network / sourcecontrol" />
<subject buildResult="Fixed" value="${CCNetProject} is fixed now! last checkin(s) by ${CCNetFailureUsers}. Well done!" />
</subjectSettings>
<xslFiles>
<file>xsl\header.xsl</file>
<file>xsl\compile.xsl</file>
<file>xsl\unittests.xsl</file>
<file>xsl\modifications.xsl</file>
<!--下面這行預設沒有加進去,需要手動将其寫進來,目的是将編譯結果添加在要發送的郵件中-->
<xslFile>xsl\compile-msbuild.xsl</xslFile>
</xslFiles>
<!--
<attachments>
<file>C:\Data\AFile.txt</file>
<file>Relative.txt</file>
</attachments>
-->
</email>
</publishers>
5.其它
添加外部連結,可以将jemeter等工作用需要用到的外部的連結,也加載到ccnet的視窗中來
<externalLinks>
<externalLink name="Future" url="http://*******/login.jsp" />
</externalLinks>
其它還有很多,可以參見官網的說明文檔,此處僅抛磚引玉。
需要說明的是,ccnet可以從程式打開,也可以通過服務運作。調試時建議從程式打開。調試好了就用服務去運作更好。通過服務運作時,需要等給它windows的登入方式進行運作才可以正常從服務運作。如下圖:
持續內建實踐之二 VSS+MsBuild2.0+CC.net
打開後,如果沒有其它特别的問題,ccnet就可以開始持續的內建了。
ccnet在工作中的截圖如下:
持續內建實踐之二 VSS+MsBuild2.0+CC.net