持续集成实践之二 VSS+MsBuild2.0+CC.net

来源:互联网 发布:java 策略算法 编辑:程序博客网 时间:2024/05/16 17:26

根据实践的需要,为实现VSS+MsBuild2.0+CCnet这种组合的搭配,持续集成服务器(CI服务器)首先需要安装MicrosoftVisual SourceSafe ,Freamwork2.0,IIS;三者缺一不可。

 

装好以上这些之后,就双击ccnet的安装程序,安装即可。在windows2003上面安装过程正常。安装的时候不要去更改它的默认地址,更改了之后,发现启动不了。安装在默认地址下,启动就正常。我在在windows 2008服务器上安装时提示:ASP设置不了,请安装完成后再去设置,但是后来发现不设置也没有问题。

 

装好之后,在程序中可以找到,如下图:

 

使用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="ci_ccnet@****.com" mailhostPassword="password" useSSL="FALSE">        <from>ci_ccnet@****.com</from>        <mailhost>smtp.****.com</mailhost>        <users>          <user name="danqueen" group="buildmaster" address="danqueen@****.com" />          <user name="developer" group="developers" address="developer@****.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的登录方式进行运行才可以正常从服务运行。如下图:



打开后,如果没有其它特别的问题,ccnet就可以开始持续的集成了。

ccnet在工作中的截图如下:

	
				
		
原创粉丝点击