CruiseControl做的确实不错, 大部分功能只要配置一下两个配置文件就可以了, 一个是 ccnet.config ,一个是dashboard.config,如果要设置服务器发送构建邮件的话,还要用到一个文件ccnet.exe.config,这里我都是缺省用ccnet.exe启动的服务器,所以服务器配置要用那个ccnet.exe.config配置.
NUnit配置段
CruiseControl.net与nunit集成有几个要点:
在ccnet.config的task任务中添加以下任务
<nunit path="C:\Program Files\NUnit 2.4.3\bin\nunit-console.exe" >
<assemblies>
<assembly>C:\workspace\test1\DotNet\Tests\bin\Debug\Tests.dll</assembly>
</assemblies>
</nunit>
msbuild配置段
我在task的构建用的是msbuild,如果工程很简单的话可以直接用vs自带的构建方法,如下
<devenv>
<solutionfile>C:\workspace\test1\DotNet\Exist.sln</solutionfile>
<configuration>Debug</configuration>
<buildtype>Build</buildtype>
<executable>C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.com</executable>
</devenv>
而总得msbuild应该是像以下的样子:
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
<workingDirectory>C:\workspace\test1\DotNet</workingDirectory>
<projectFile>Projectsln</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
<targets ></targets>
<timeout>15</timeout>
<logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
</msbuild>
这样msbuild就会编译整个solution.
NCover集成
需要集成NCover,需要先在要集成的工程文件如test.csproj文件上加一个头,让build任务能调用NCover,
<UsingTask TaskName="NCoverExplorer.MSBuildTasks.NCoverExplorer"
AssemblyFile="C:\Program Files\NCover\Build Task Plugins\NCoverExplorer.MSBuildTasks.dll"/>
<UsingTask TaskName="NCoverExplorer.MSBuildTasks.NCover"
AssemblyFile="C:\Program Files\NCover\Build Task Plugins\NCoverExplorer.MSBuildTasks.dll"/>
<UsingTask TaskName="NCoverExplorer.MSBuildTasks.NUnitProject"
AssemblyFile="C:\Program Files\NCover\Build Task Plugins\NCoverExplorer.MSBuildTasks.dll"/>
然后在此工程文件中加入NCover的msbuild的task:
<Target Name="Coverage">
<NCover ToolPath="C:\Program Files\NCover"
WorkingDirectory="$(MSBuildProjectDirectory)\bin\Debug"
CommandLineExe="nunit-console.exe"
CommandLineArgs="Tests.dll"
LogFile="Coverage.log"
CoverageFile="Coverage.xml"
ContinueOnError="true"
/>
</Target>
<ItemGroup>
<MySourceFiles Include="CoverageReport.xsl"/>
</ItemGroup>
<Target Name="CreateReport">
<NCoverExplorer
ToolPath="C:\Program Files\NCover"
ProjectName="$(MSBuildProjectDirectory)\bin\debug"
OutputDir="$(MSBuildProjectDirectory)"
ReportType="ModuleClassSummary"
XmlReportName="CoverageSummary.xml"
CoverageFiles="Coverage.xml" />
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="C:\Program Files\CruiseControl.NET\server\xsl"
/>
</Target>
NCover会先生成一个Coverage.xml的报告文件,然后会根据这个文件生成CoverageSummary.xml,并且会有一个套用格式的CoverageReport.xsl.
生成了报告后,需要在ccnet.config中的publishers中的merge任务将报表merge到CruiseControl的log文件中:
<merge>
<files>
<file>C:\workspace\test1\DotNet\Tests\CoverageSummary.xml</file>
</files>
</merge>
并且想要在webdashborad中显示这个coverage的报告的时候,需要在dashborad.config中加入build出来的xsl文件:
<buildReportBuildPlugin>
<xslFileNames> <xslFile>xsl\CoverageReport.xsl</xslFile> </xslFileNames></buildReportBuildPlugin>
然后还需要加入这段:
<xslReportBuildPlugin description="CoverageReport" actionName="NCoverBuildReport" xslFileName="xsl\CoverageReport.xsl" />
还有一点 :
<buildReportBuildPlugin>
<xslFileNames>
<xslFile>xsl\header.xsl</xslFile>
<xslFile>xsl\modifications.xsl</xslFile>
<xslFile>xsl\compile.xsl</xslFile>
<xslFile>xsl\compile-msbuild.xsl</xslFile>
<xslFile>xsl\MsTestSummary.xsl</xslFile>
<xslFile>xsl\unittests.xsl</xslFile>
<xslFile>xsl\tests.xsl</xslFile>
<xslFile>xsl\CoverageReport.xsl</xslFile>
<xslFile>xsl\SimianSummary.xsl</xslFile>
<xslFile>xsl\fitnesse.xsl</xslFile>
</xslFileNames>
</buildReportBuildPlugin>
上面的就是在webdashboard中左边导航菜单的内容,可以根据需要进行配置,配置好后IIS要重启,不然看不到最新的配置内容,在dos窗口下用命令iisreset重启后就可以看到了