前言
团队开发需要进行集中的项目文件管理与有效的协调,我们采用源代码管理工具协助我们管理,卓有成效。限定重要文件的访问权限、使用悲观锁杜绝成员同时编辑同一份文件、不允许长时间迁出文件等规则让我们在某一时间段内非常愉快。但是慢慢的,有人抱怨“我获取了源代码怎么编译错误?”。于是增加规定:迁入之前必须获取最新,然后再一次编译,成功后方可迁入VSS。这种办法是很不错,但是工作繁琐了,尤其对大型项目,更加的苦不堪言。看来我们需要一个机器人帮我们,那就是持续集成。持续集成是一种实践,可以让团队在持续的基础上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。通俗一点儿说,就是指对于开发人员的每一次代码提交,都自动地把代码仓库中所有代码获取下来,执行编译、并自动运行所有的测试用例,如出现错误则通知人员这是一个失败的提交。一个适合的集成频率非常重要,根据团队的实际情况采用灵活的集成频率,过于频繁的频率会加大持续集成的实施难度,甚至最后实施失败。接下来简单介绍一下在.NET上常用的持续集成软件CruiseControl.NET和它的使用方法。
CruiseControl.NET实际应用
在实验部署中,CruiseControl.NET集成了如下功能:
- MsBuild集成编译
- 电子邮件提醒功能
- Nunit单元测试报告
- 自动发布网站应用程序到指定目录
CruiseControl.NET安装
目前CruiseControl.NET官方网站提供的最新版本为1.4.2,提供三种方式下载——源代码、zip压缩包、windows安装文件。选择windows安装文件最为方便,下载相应的exe文件,点击选择安装目录安装即可。安装完成后,我们可以选择点击ccnet.exe来启动软件也可以选择从系统服务启动。
CruiseControl.NET配置
程序配置文件ccnet.config是CruiseControl.NET Server最核心的文件,借助CCNetConfig图形化工具我们可以很方便的进行配置的修改,下面我就分别介绍每一项如何进行配置:
基础配置
配置文件为xml格式,最外层的标签为cruisecontrol,包含一个完整的配置,如下所示:
<cruisecontrol>
<queue name="Q1" duplicates="ApplyForceBuildsReplace"/>
... ...
</cruisecontrol>
queue标签
queue标签允许进行集成请求序列配置,规定重复的集成请求如何被处理,一共有三种处理方式:
- UseFirst:默认的处理方式,处理第一个添加的请求
- ApplyForceBuildsReplace:允许强制集成替换现有的请求序列,但是不改变请求序列的位置
- ApplyForceBuildsReAdd:允许强制集成删除即将执行的请求,同时重新添加强制集成进入序列
配置项目
<!--name:项目名称;queue:采用何种序列处理方式;queuePriority:序列的优先级-->
<project name="Project 1" queue="Q1" queuePriority="1">
<!--工作目录的配置,设定一个绝对路径作为集成的工作目录-->
<workingDirectory>yourWorkingDirectory</workingDirectory>
<!--集成结果保存路径,每个项目配置一个唯一路径-->
<artifactDirectory>yourArtifactDirectory</artifactDirectory>
<!--web界面集成报告的URL,这个URL一般用在邮件内容中-->
<webURL>http://server1/ccnet/server/local/project/testProject/ViewLatestBuildReport.aspx</webURL>
<!--源代码迁入与启动集成的最少时间间隔-->
<modificationDelaySeconds>2</modificationDelaySeconds>
<!--触发模式,一般采用间隔触发器-->
<triggers>
<!--name:触发器名称;seconds:间隔时间;BuildCondition:构建条件,有两个选项——强制集成ForceBuild和文件变动时集成IfModificationExists;initialSeconds:server启动与第一次构建的时间间隔-->
<intervalTrigger name="continuous" seconds="30" buildCondition="ForceBuild" initialSeconds="30"/>
</triggers>
</project>
配置源代码管理
源代码管理为项目配置中的一个子结点,下面以VSS为例做一下详细的介绍,示例及解释如下:
<sourcecontrol type="vss">
<!--VSS的执行文件-->
<executable>C:\Program Files\Microsoft Visual Studio\VSS\win32\SS.EXE</executable>
<!--源代码的VSS路径-->
<project>$/CCNET</project>
<!--VSS用户名-->
<username>buildguy</username>
<!--VSS密码-->
<password>buildguypw</password>
<!--VSS路径,包含SRCSAFE.INI的目录-->
<ssdir>\\192.168.1.1\vss</ssdir>
<!--VSS工作目录,源代码将获取到改目录中-->
<workingDirectory>c:\myBuild</workingDirectory>
<!--VSS操作的过期时间-->
<timeout units="minutes">10</timeout>
</sourcecontrol>
配置编译
源代码配置完成后,CCNet Server就能够把源代码获取到本地了,下面我们就可以配置构建节点,让CCNet为我们进行自动构建。CCNet支持NAnt、MSBuild两种构建方式,通过这两种方式我们可以方便的进行项目集成编译。NAnt是功能非常强大的开源.NET编译工具,但是需要编写build文件,该文件负责指导Nant进行编译,NAnt也可以直接编译sln文件,但是对2005支持不好。MSBuild是微软随VS2005一起发布的一个集成编译工具,和NAnt类似,可以直接编译sln文件,功能上完全可以替代NAnt,下面就以MSBuild为例介绍一下如何进行配置:
<msbuild>
<!--MSBuild的路径-->
<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
<!--工作路径-->
<workingDirectory>C:\dev\ccnet</workingDirectory>
<!--解决方案或项目文件-->
<projectFile>CCNet.sln</projectFile>
<!--MSBuild的构建参数-->
<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
<!--构建目标-->
<targets>Build</targets>
<!--超时时间-->
<timeout>900</timeout>
<!--日志文件处理模快-->
<logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
通过设定msbuild的参数还可以执行很多复杂的任务,例如发布网站到指定目录。
配置单元测试
如果某个类库或应用程序包含单元测试,我们可以配置是的ccnet在集成过程中运行单元测试,基本配置范例与说明如下:
<nunit>
<!--nunit的路径-->
<path>D:\dev\ccnet\ccnet\tools\nunit\nunit-console.exe</path>
<!--需要进行单元测试的程序集-->
<assemblies>
<assembly>D:\dev\Refactoring\bin\Debug\Refactoring.exe</assembly>
<assembly>D:\dev\Refactoring\bin\Debug\Refactoring.Core.dll</assembly>
</assemblies>
</nunit>
配置邮件提醒
邮件提醒任务需要部署在publishers节点下面,若部署在tasks节点下面,发生构建失败将不会执行后续任务,因此无法收到失败的提醒邮件。配置的示例代码及解释如下:
<!--from:邮件发件人;mailhost:邮件服务器地址;mailport:smtp端口;includeDetail:是否包含详细报告信息;mailhostUsername:smtp用户名;mailhostPassword:smtp密码;useSSL:是否使用ssl发送邮件-->
<email from="buildmaster@mycompany.com" mailhost="smtp.mycompany.com" mailport="25" includeDetails="TRUE"
mailhostUsername="smtpuser" mailhostPassword="smtppassword" useSSL="FALSE">
<!--定义一组接收邮件的用户-->
<users>
<!--name:用户名称,必须同源代码管理系统的帐号一致;group:所属分组;address:邮件地址;-->
<user name="BuildGuru" group="buildmaster" address="buildguru@mycompany.com"/>
<user name="JoeDeveloper" group="developers" address="joedeveloper@thoughtworks.com"/>
</users>
<!--用户组-->
<groups>
<!--name:组名称;nitification:通知策略——Always[每次构建均发送通知]、Changed[构建结果发生改变时发送通知,例如从success变为fail]、Failed[当构建失败时发送通知]、Success[当构建成功时发送通知]、Fixed[当构建从失败到通知时发送通知]、Exception[构建发生异常时发送通知]-->
<group name="developers" notification="change"/>
<group name="buildmaster" notification="always"/>
</groups>
<!--设置提交者通知测略,当构建完成后,符合符合设置的条件将邮件通知所有此次源代码改变的参与者-->
<modifierNotificationTypes>
<NotificationType>Failed</NotificationType>
<NotificationType>Fixed</NotificationType>
</modifierNotificationTypes>
</email>
配置范例
为节省大家时间,这里提供了一个基本的配置文件,包含单元测试、编译、网站发布、邮件通知。
<cruisecontrol>
<project name="CI2.0" queue="Q1" queuePriority="1">
<workingDirectory>E:\Integration\CI2.0\WorkingDirectory</workingDirectory>
<artifactDirectory>E:\Integration\CI2.0\Artifacts</artifactDirectory>
<webURL>http://192.168.1.1/ccnet/server/local/project/CI2.0/ViewLatestBuildReport.aspx</webURL>
<modificationDelaySeconds>10</modificationDelaySeconds>
<sourcecontrol type="vss">
<project>$/CI2.0</project>
<username>tianc</username>
<password>password</password>
<executable>D:\Program Files\Microsoft Visual SourceSafe\SS.EXE</executable>
<ssdir>\\192.168.1.2\vss</ssdir>
<autoGetSource>True</autoGetSource>
<applyLabel>False</applyLabel>
<workingDirectory>E:\Integration\CI2.0\WorkingDir</workingDirectory>
<timeout units="Minutes">10</timeout>
<culture>zh-CN</culture>
<cleanCopy>True</cleanCopy>
</sourcecontrol>
<triggers>
<intervalTrigger name="continuous" seconds="60" />
</triggers>
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
<workingDirectory>E:\Integration\CI2.0\WorkingDir</workingDirectory>
<projectFile>E:\Integration\CI2.0\WorkingDir\Src\2.0\CI.Web\CI.Web.csproj</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Release;OutDir=E:\Integration\CI2.0\WorkingDir\Release\2.0\ /v:diag</buildArgs>
<targets>CLean;Build;_CopyWebApplication</targets>
<logger>D:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
<timeout>600</timeout>
</msbuild>
<nunit>
<path>D:\Program Files\NUnit 2.4.8\bin\nunit-console.exe</path>
<outputfile>E:\Integration\Bitauto.Review2.0\Artifacts\nunit-results.xml</outputfile>
<assemblies>
<assembly>E:\Integration\CI2.0\WorkingDir\Src\2.0\CI.Data\bin\Release\CI.Data.dll</assembly>
<assembly>E:\Integration\CI2.0\WorkingDir\Src\2.0\CI.BLL\bin\Release\CI.BLL.dll</assembly>
</assemblies>
</nunit>
<buildpublisher>
<sourceDir>E:\Integration\CI2.0\WorkingDir\Release\2.0\_PublishedWebsites</sourceDir>
<publishDir>E:\Integration\CI2.0\Release</publishDir>
</buildpublisher>
</tasks>
<publishers>
<xmllogger logDir="E:\Integration\CI2.0\XmlLogger" />
<email mailhost="mail.CI.com" from="ci@CI.com">
<mailhostUsername>tianc</mailhostUsername>
<mailhostPassword>password</mailhostPassword>
<includeDetails>True</includeDetails>
<users>
<user name="tianc" address="tianc@CI.com" group="developer" />
<user name="lizd" address="lizd@CI.com" group="developer" />
<user name="xiongyh" address="xiongyh@CI.com" group="developer" />
</users>
<groups>
<group name="developer" notification="Always" />
</groups>
<converters />
<modifierNotificationTypes>
<NotificationType>Always</NotificationType>
</modifierNotificationTypes>
</email>
</publishers>
<state type="state" directory="E:\Integration\CI2.0\CCNetState" />
</project>
</cruisecontrol>
- 大小: 19.5 KB
分享到:
相关推荐
### 自动化集成CruiseControl.NET、NAnt与NUnit:构建持续集成环境 #### 概述 在软件开发过程中,回归测试是一个重要的但经常被忽视的环节。回归测试是指在对已有代码进行修改后重新运行之前的测试用例,以确保...
CruiseControl.NET是一个专为.NET平台设计的自动化持续集成服务器,它的出现是为了满足.NET开发者在项目构建与测试自动化方面的需求。作为CruiseControl for Java的C#版本,CruiseControl.NET继承了其核心理念,即...
**使用CruiseControl.Net进行持续集成** 持续集成(Continuous Integration,CI)是软件开发过程中的一个关键实践,它强调开发人员频繁地将代码更改合并到主分支,以便尽早发现并解决潜在的问题。CruiseControl.Net...
CruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、...
CruiseControl.NET(简称 CC.NET)是一款开源的持续集成服务器,主要用于自动化软件开发过程中的构建、测试和部署。版本1.6是其较早的一个稳定版本,提供了丰富的功能和强大的扩展性,为开发团队提供了高效的协作...
它是由ThoughtWorks公司开发的,是CruiseControl.NET的Ruby版本,因此在Ruby社区中被广泛应用。CruiseControl.rb的核心理念是通过持续地集成代码来尽早发现并解决潜在的问题,从而提高软件质量。 ### 一、Cruise...
【标题】"ccnet每日构建--附带配置文件"揭示了这个压缩包是关于使用CruiseControl.NET(简称ccnet)进行持续集成实践的一个资源集合。CruiseControl.NET是一款开源的持续集成工具,用于自动化软件项目的构建、测试和...
CCTray是一款强大的持续集成工具,它主要用于监视CruiseControl.NET服务器上的项目构建状态。在软件开发过程中,尤其是在敏捷开发环境中,持续集成是至关重要的实践之一。CCTray的使用可以极大地提高团队的效率,...
【持续化集成与CruiseControl.Net (CCNet)】 持续化集成是一种软件开发实践,旨在频繁地将开发人员的更改合并到主分支,通常每天至少一次,以尽早发现和解决问题。这种做法有助于减少集成阶段的冲突,提高软件质量,...
### 持续集成(Continuous Integration):理论与实践 #### 标题解析 - **持续集成**(Continuous Integration,简称 CI)是一种软件开发实践,...这对于希望在.NET 2.0项目中引入持续集成实践的团队来说非常有价值。
6. **CruiseControl.NET (CC.NET)**:CruiseControl.NET 是一个持续集成服务器,它可以持续监控源代码仓库(如VSS)的变化,一旦检测到更新,就会触发构建过程。 每日构建的工作流程大致如下: - CruiseControl...
### Cruisecontrol:持续集成平台与分布式构建实践 #### 一、CruiseControl简介 CruiseControl是一个开源的持续集成平台,旨在帮助企业实现自动化构建过程,提高软件开发效率和质量。项目采用Apache许可证发布,...
CruiseControl是一款开源的持续集成工具,它允许开发者设置自动化的构建流程,每当代码库中有新的提交时,CruiseControl会自动触发构建过程。通过这种方式,团队可以尽早发现并修复可能引入的问题,避免了在后期集成...
CC.NET(CruiseControl .NET)是一款开源的持续集成工具,专为.NET Framework环境设计。它提供了一种自动化的方式来构建、测试和部署软件项目,帮助开发团队保持代码的质量并及时发现集成问题。CC.NET 1.8.0是该工具...
10.2.1 CruiseControl.NET 10.2.2 Jenkins 10.2.3 TeamCity 10.2.4 Team Foundation Server 10.3 CI生命周期 10.3.1 重新生成 10.3.2 单元测试 10.3.3 分析 10.3.4 打包 10.3.5 部署 10.3.6 稳定性测试 10.3.7 生成...
CruiseControl.NET是持续集成服务器,监测代码仓库的变化并触发构建过程。NUnit2Report则将NUnit的测试结果转换为HTML报告,使得测试结果更易于阅读。 在实际操作中,首先需要安装上述所有工具。CruiseControl.NET...
10.2.1 CruiseControl.NET 174 10.2.2 Jenkins 175 10.2.3 TeamCity 175 10.2.4 Team Foundation Server 176 10.3 CI生命周期 176 10.3.1 重新生成 177 10.3.2 单元测试 182 10.3.3 分析 184 10.3.4 打包 ...