TeamCity通过工件路径将fxcop和coveragereport转换为构建工件

时间:2011-05-26 00:09:31

标签: teamcity

我正在尝试获取fxCop结果xml和coveragereport.xml以在构建后发布到工件。

以下是我现在所拥有的,

%system.teamcity.build.tempDir%/fxcop-output*/fxcop-result.xml => BuildLog/FxCop
%system.teamcity.build.tempDir%/teamcity*ncover/CoverageReport.xml => BuildLog/Coverage

但结果目录具有以下格式

BuildLog --> Coverage --> teamcity8681981431807223307ncover --> CoverageReport.xml
BuildLog --> FxCop --> fxcop-output-3810116228914218788 --> fxcop-result.xml

我很好奇如果没有包含文件夹结构,我应该如何做到这一点。

BuildLog --> Coverage --> CoverageReport.xml
BuildLog --> FxCop --> fxcop-result.xml

感谢

1 个答案:

答案 0 :(得分:4)

因为工件源定义中有星号(*),搜索模式可能会抓取多个源文件。

为了区分输出路径中的这些(理论上多个)文件,TeamCity将在输出结构中添加* - 模式的匹配,例如: [...] teamcity 8681981431807223307 ncover [...]。因此,无法选择(可能)多个文件并将它们存储为一个文件。

也许答案是另一种方法。您可以编写一个使用TeamCity Build Script Interaction feature的MSBuild脚本,类似于:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
     ToolsVersion="4.0">

<ItemGroup>
  <FxCopResults Include="%system.teamcity.build.tempDir%/fxcop-output*/fxcop-result.xml" />
  <CoverageResults Include="%system.teamcity.build.tempDir%/teamcity*ncover/CoverageReport.xml" />
</ItemGroup>

<Target Name="PublishArtifacts">
  <Message Text="##teamCity[publishArtifacts '%(FxCopResults) => BuildLog\FxCop'" />
  <Message Text="##teamCity[publishArtifacts '%(CoverageResults) => BuildLog\Coverage'" />
</Target>

最后,在执行分析构建步骤后,可以使用带有MSBuild构建运行器的TeamCity构建步骤在此脚本中启动msbuild目标“PublishArtifacts”。