天天看點

持續內建實踐之二 VSS+MsBuild2.0+CC.net

根據實踐的需要,為實作VSS+MsBuild2.0+CCnet這種組合的搭配,持續內建伺服器(CI伺服器)首先需要安裝MicrosoftVisual SourceSafe ,Freamwork2.0,IIS;三者缺一不可。

裝好以上這些之後,就輕按兩下ccnet的安裝程式,安裝即可。在windows2003上面安裝過程正常。安裝的時候不要去更改它的預設位址,更改了之後,發現啟動不了。安裝在預設位址下,啟動就正常。我在在windows 2008伺服器上安裝時提示:ASP設定不了,請安裝完成後再去設定,但是後來發現不設定也沒有問題。

裝好之後,在程式中可以找到,如下圖:

持續內建實踐之二 VSS+MsBuild2.0+CC.net

使用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