CruiseControl.NET 1.8.5-不创建msbuild结果xml文件
我对构建服务器非常陌生,但我的雇主要求我做一些测试,因为正如杰夫·阿特伍德(Jeff Atwood)的优秀文章所说,F5不是一个构建过程。在这一阶段,我将在CruiseControl.NET服务器上创建并运行一些样例构建和测试报告。到目前为止,我已经得到了一个构建,在添加新构建/项目之前,运行配置文件将需要一些整理,但是概念证明已经存在,但是报告令人头痛 我要找的主要报告是OutNunit测试和SpecFlow集成测试。测试运行良好,因为我生成了一个外观合理的xml文件,并希望将其合并到主构建结果中,以便显示NUnit/SpecFlowtests的结果 每当构建完成时,ViewFarmReport.aspx中的消息都会报告以下内容:失败的任务:XmlLogPublisher 这与Windows应用程序日志源-CC.Net中报告的以下错误相结合 2015-03-24 08:36:52987[Initech.SuperCrm DEV]错误CruiseControl.NET[null]-Publisher引发异常:ThoughtWorks.CruiseControl.Core.CruiseControl异常:无法读取文件的内容:C:\CCNet\BuildArtifacts\Initech.SuperCrm DEV\msbuild-results-7c657954-2c3e-405f-b0f1-7da1299788fd.xml-->System.IO.FileNotFoundException:找不到文件“C:\CCNet\BuildArtifacts\Initech.SuperCrm DEV\msbuild-results-7c657954-2c3e-405f-b0f1-7da1299788fd.xml” 公司/申请名称已审查 这使我怀疑在msbuild中合并失败会导致CruiseControl.NET自版本起自动删除的结果。。。1.5还是1.6?正在阻止NUnit结果合并到中 BuildArtifacts文件夹中没有msbuild结果文件,这并不奇怪,因为我认为我当前的msbuild配置不允许基于xml的日志记录,因为我正在使用ThoughtWorks.CruiseControl.msbuild.dll记录器 根据CruiseControl.NET的在线文档,可以使用支持XML的自定义记录器:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,但是此记录器的下载位置: 看来已经不存在了 有谁能说我的思路是否正确,我的选择是什么 以下是我的完整配置,仅供参考:CruiseControl.NET 1.8.5-不创建msbuild结果xml文件,msbuild,nunit,cruisecontrol.net,specflow,Msbuild,Nunit,Cruisecontrol.net,Specflow,我对构建服务器非常陌生,但我的雇主要求我做一些测试,因为正如杰夫·阿特伍德(Jeff Atwood)的优秀文章所说,F5不是一个构建过程。在这一阶段,我将在CruiseControl.NET服务器上创建并运行一些样例构建和测试报告。到目前为止,我已经得到了一个构建,在添加新构建/项目之前,运行配置文件将需要一些整理,但是概念证明已经存在,但是报告令人头痛 我要找的主要报告是OutNunit测试和SpecFlow集成测试。测试运行良好,因为我生成了一个外观合理的xml文件,并希望将其合并到主构建结
<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
<cb:define MSBuildPath="C:\Windows\Microsoft.NET\Framework\v4.0.30319" />
<cb:define WorkingBaseDir="C:\CCNet\Builds" />
<cb:define ArtifactBaseDir="C:\CCNet\BuildArtifacts" />
<cb:define MSBuildLogger="C:\Program Files (x86)\CruiseControl.NET\server
\ThoughtWorks.CruiseControl.MsBuild.dll" />
<cb:define NUnitExe="C:\Jenkins\Nunit\nunit-console.exe" />
<cb:define name="vsts_ci">
<executable>C:\Jenkins\tf.exe</executable>
<server>http://tfs-srv:8080/tfs/LEEDS/</server>
<domain>CONTOSO</domain>
<autoGetSource>true</autoGetSource>
<cleanCopy>true</cleanCopy>
<force>true</force>
<deleteWorkspace>true</deleteWorkspace>
</cb:define>
<project name="Initech.Libraries" description="Shared libraries used in all Initech projects"
queue="Q1">
<state type="state" directory="C:\CCNet\State"/>
<artifactDirectory>$(ArtifactBaseDir)\Initech.Libraries</artifactDirectory>
<workingDirectory>$(WorkingBaseDir)\Initech.Libraries</workingDirectory>
<triggers>
<intervalTrigger
name="continuous"
seconds="30"
buildCondition="IfModificationExists"
initialSeconds="5"/>
</triggers>
<sourcecontrol type="vsts">
<cb:vsts_ci/>
<workspace>CCNET_Initech.Libraries</workspace>
<project>$/InitechLibraries/Initech.Libraries</project>
</sourcecontrol>
</project>
<project name="Initech.SuperCrm-DEV" description="Initech.SuperCrm Application, Development
Version" queue="Q1">
<cb:define ArtifactDirectory="$(ArtifactBaseDir)\Initech.SuperCrm-DEV" />
<cb:define WorkingDirectory="$(WorkingBaseDir)\Initech.SuperCrm-DEV" />
<cb:define OutputDirectory="$(WorkingDirectory)\Initech.SuperCrm\bin\Debug" />
<cb:define ProjectFile="Initech.SuperCrm.sln" />
<cb:define NUnitLog="$(WorkingDirectory)\NunitResults.xml" />
<state type="state" directory="C:\CCNet\State"/>
<artifactDirectory>$(ArtifactDirectory)</artifactDirectory>
<workingDirectory>$(WorkingDirectory)</workingDirectory>
<triggers>
<!-- check the source control every X time for changes,
and run the tasks if changes are found -->
<intervalTrigger
name="continuous"
seconds="30"
buildCondition="IfModificationExists"
initialSeconds="5"/>
</triggers>
<sourcecontrol type="vsts">
<cb:vsts_ci/>
<workspace>CCNET_Initech.SuperCrm-DEV</workspace>
<project>$/InitechSuperCrm/SuperCrm/Initech.SuperCrm-DEV</project>
</sourcecontrol>
<tasks>
<exec>
<executable>C:\Program Files (x86)\DXperience 12.1\Tools\DXperience
\ProjectConverter-console.exe</executable>
<buildArgs>$(WorkingDirectory)</buildArgs>
</exec>
<msbuild>
<executable>$(MSBuildPath)\MSBuild.exe</executable>
<workingDirectory>$(WorkingDirectory)</workingDirectory>
<projectFile>$(ProjectFile)</projectFile>
<timeout>900</timeout>
<logger>$(MSBuildLogger)</logger>
</msbuild>
<exec>
<executable>$(NUnitExe)</executable>
<buildArgs>/xml=$(NUnitLog) /nologo $(WorkingDirectory)\$(ProjectFile)
</buildArgs>
</exec>
</tasks>
<publishers>
<buildpublisher>
<sourceDir>$(OutputDirectory)</sourceDir>
<useLabelSubDirectory>true</useLabelSubDirectory>
<alwaysPublish>false</alwaysPublish>
<cleanPublishDirPriorToCopy>true</cleanPublishDirPriorToCopy>
</buildpublisher>
<merge>
<files>
<file>$(NUnitLog)</file>
</files>
</merge>
<xmllogger logDir="C:\CCNet\BuildArtifacts\Initech.SuperCrm-DEV\buildlogs" />
<artifactcleanup cleanUpMethod="KeepLastXBuilds"
cleanUpValue="50" />
</publishers>
</project>
</cruisecontrol>
我一直在努力想办法解决这个问题,但我没有太多事情要做,因此非常感谢您的帮助。在长时间的碰壁之后,我似乎终于找到了解决办法 1 Kobush.Build.dll可用作MSBuild的记录器。查看CruiseControl.NET文档中的属性,它似乎是由同一个开发人员编写的,但进行了扩展 2由于msbuild报告输出的默认位置,需要进行一些调整。因为在默认情况下,它被转储到buildartifacts文件夹,所以很容易被过早删除 我不再在buildpublisher中复制之前清理发布目录,并在工件清理之前执行发布服务器的合并和xmllogger部分 因此,我现在将msbuild和nunit输出/结果集成到主生成日志中,并且可以通过CruiseControl.NET仪表板使用它们
可能有一种更整洁的方法来处理这个问题,但目前我只是在进行概念验证。我鼓励您将CC.NET视为超级奇特的msbuild.exe执行程序………编写一个mysolution.proj文件,并将msbuild代码放在该文件中………将该文件放在与.sln文件相同的目录中。让CC.NET使用您的源代码管理任务提取此文件以供选择…然后以这种方式运行msbuild.exe mysolution.proj…您正在最小化您使用的CC.NET专有任务的数量。