【发布时间】:2015-03-24 09:15:34
【问题描述】:
我是构建服务器的新手,但我的雇主要求我进行一些测试(因为 F5 不是构建过程,正如 Jeff Atwood 的优秀文章所说)。在这个阶段,我正致力于在 CruiseControl.NET 服务器上启动和运行一些示例构建和测试报告。到目前为止,我已经建立并运行了(在添加新的构建/项目之前需要整理配置文件,但概念证明已经存在)但是报告引起了一些头痛。
我正在寻找的主要报告是针对 NUnit 测试和 SpecFlow 集成测试的。测试运行良好(因为我正在生成一个看起来很合理的 xml 文件)并且希望将其合并到主构建结果中,以便我可以显示 NUnit/SpecFlowtests 的结果。
每当构建完成时,都会在消息中报告以下内容(在 ViewFarmReport.aspx 中):“Failing Tasks : XmlLogPublisher”
这与 Windows 应用程序日志中报告的以下错误相结合(来源 - CC.Net)
2015-03-24 08:36:52,987 [Initech.SuperCrm-DEV] 错误 CruiseControl.NET [(null)] - 发布者抛出异常:ThoughtWorks.CruiseControl.Core.CruiseControlException:无法读取文件的内容: 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-results 文件,这并不让我感到惊讶,因为我不相信我当前的 msbuild 配置允许基于 xml 的日志记录,因为我正在使用 ThoughtWorks.CruiseControl.MsBuild.dll 记录器。
根据 CruiseControl.NET 的在线文档,可以使用启用 XML 的自定义记录器:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,但是此记录器的下载位置:here
似乎不再存在了。
谁能说出我的想法是否正确以及我的选择是什么?
供参考,这是我的完整配置:
<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>
在试图解决这个问题时我一直在扯头发,而且我没有太多开始,所以非常感谢任何帮助。
【问题讨论】:
标签: msbuild nunit cruisecontrol.net specflow