CruiseControl.NET 1.8.5-不创建msbuild结果xml文件

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文件,并希望将其合并到主构建结

我对构建服务器非常陌生,但我的雇主要求我做一些测试,因为正如杰夫·阿特伍德(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 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专有任务的数量。