您的位置:首页 > 产品设计 > UI/UE

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

2011-10-19 15:54 323 查看
根据实践的需要,为实现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在工作中的截图如下:
















































































                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: