【问题标题】:How to use StyleCop with TeamCity如何在 TeamCity 中使用 StyleCop
【发布时间】:2011-09-16 06:00:26
【问题描述】:

有没有人成功地从 TeamCity 运行 StyleCop?

我知道 StyleCop 支持命令行模式,但我不确定这将如何集成到 TeamCity 的报告输出中。

我已经检查了这个插件在这里找到:https://bitbucket.org/metaman/teamcitydotnetcontrib/src/753712db5df7/stylecop/

但是无法运行。

我正在使用 TeamCity 6.5.1(最新)。

【问题讨论】:

  • 您是否使用 MSBuild 作为构建运行器?
  • 我正在使用 Visual Studio SLN 运行器。
  • 在@Benjol 的回答中隐藏了非常有用的评论“我做的另一件愚蠢的事情是没有正确阅读自述文件:您必须解压缩下载的 zip,并使用里面的 zip。” - 这让我很生气!

标签: teamcity stylecop


【解决方案1】:

我来晚了,但实现此目的的一个非常简单的方法是在您要使用 StyleCop 分析的任何项目中安装 StyleCop.MSBuild NuGet 包。

安装软件包后,StyleCop 分析将在您执行的每个构建中运行,无论在何处或如何调用它,例如 VS、命令行、msbuild、psake、rake、fake、bake、 nant,构建服务器等。不需要特殊操作。

如果您希望在 StyleCop 规则被破坏时构建失败,您只需在每个适当的构建配置下将以下元素添加到项目文件中,例如

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
    ...

同样,这将适用于每个构建,无论在何处以及如何调用它。

【讨论】:

  • 很酷,但添加到每个项目中仍然有点麻烦,你不觉得吗?
  • 您可以一次性将包添加到解决方案中的所有项目,就像任何其他 NuGet 包一样。如果您希望构建因违规而失败,那么可以,您必须手动将该元素添加到每个项目中。但是,该步骤是可选的-在接受的答案中,每个项目都有一个强制性的手动步骤;-)
  • @AdamRalph 使用这种方法,如果有任何错误,您如何将 StyleCop 分析的结果输出到 TeamCity 中以进行可视化?谢谢!
  • 我没有做任何特别的事情。我只是让消息进入日志并从那里检查它们。在我的日常工作中,我们未能建立违规行为,因此我们不得不关注日志并修复它们。对于 OSS,当我在 VS 本地看到它们时,我会让它们通过并修复它们。
  • 明白了,这是有道理的。您永远不会(即不应该)能够在构建无法在您自己的机器上本地工作的情况下提交任何内容,那么在 TeamCity 中报告结果的意义何在。我可以忍受这一点。谢谢!
【解决方案2】:

StyleCop here 有一个(新的?)第三方 TeamCity 插件,(虽然我还没有尝试过)。

更新:据我所知,最新版本仅适用于 TeamCity 7(或者我做错了什么)。另外,我有一个非常慢的(虚拟)构建服务器,所以即使在服务重新启动后,StyleCop 运行器也需要一段时间才能出现在 Web 界面中。

我做的另一件愚蠢的事情是没有正确阅读自述文件:你必须解压缩下载的 zip,然后使用 里面的 zip

我最初也是从“包含”选项(用于构建步骤)中的 .cs 文件列表开始的,但这不起作用; sln 或 csproj 文件的链接确实有效。

【讨论】:

  • 在 TC8 中不起作用,除非我像你一样做错了什么。说明是错误的,因为下载中没有 stylecop.zip,您必须制作它。反正不行……
【解决方案3】:

您是否知道 teamcity 仅通过 msbuild 提供特定属性? 无需服务消息,请参阅: http://confluence.jetbrains.net/display/TCD65/MSBuild+Service+Tasks

因此您不必添加自定义报告页面。 使用构建统计信息,例如

<TeamCitySetStatus Status="$(AllPassed)" Text="Violations: $(StyleCopViolations)" />

然后您也可以记录统计信息:

<TeamCityReportStatsValue Key="StyleCopViolations" Value="$(StyleCopViolations)" />

然后创建要显示的自定义图表,您的 msbuild 输出中已经存在违规行为。 编辑 main-config.xml 并添加:

<graph title="Style Violations" seriesTitle="Warning">
   <valueType key="StyleCopViolations" title="Violations" buildTypeId="bt20"/>
 </graph>

其中 buildTypeId="bt20" bt20 是您的风格构建。

【讨论】:

  • 很好,我会解决的。任何方式也可以从 TC GUI 执行此操作?
  • 前 2 个用于您的常规 msbuild,您需要在每个上使用一个条件,以便它不会破坏任何手动构建 - 只有在 tc.图形是服务器配置文件夹上的文本编辑。
【解决方案4】:

我不知道您对 MSBuild 有多熟悉,但您应该能够在 TC 6 及更高版本中添加新的构建步骤,并将 MSBuild 设置为构建运行器,并将其指向一个 .proj 文件类似于以下内容:

<Target Name="StyleCop">

  <!-- Create a collection of files to scan -->
  <CreateItem Include="$(SourceFolder)\**\*.cs">
    <Output TaskParameter="Include" ItemName="StyleCopFiles" />
  </CreateItem>

  <StyleCopTask
    ProjectFullPath="$(MSBuildProjectFile)"
    SourceFiles="@(StyleCopFiles)"
    ForceFullAnalysis="true"
    TreatErrorsAsWarnings="true"
    OutputFile="StyleCopReport.xml"
    CacheResults="true" />

  <Xslt Inputs="StyleCopReport.xml"
     RootTag="StyleCopViolations" 
     Xsl="tools\StyleCop\StyleCopReport.xsl"
     Output="StyleCopReport.html" />

  <XmlRead XPath="count(//Violation)" XmlFileName="StyleCopReport.xml">
    <Output TaskParameter="Value" PropertyName="StyleCopViolations" />
  </XmlRead>

  <Error Condition="$(StyleCopViolations) > 0" Text="StyleCop found $(StyleCopViolations) broken rules!" />

</Target>

如果您不想因 StyleCop 错误而导致构建失败,请将 Error 任务设置为 Warning

您还需要将以下内容添加到您的 .proj 文件中:

<UsingTask TaskName="StyleCopTask" AssemblyFile="$(StyleCopTasksPath)\Microsoft.StyleCop.dll" />

Microsoft.StyleCop.dll 包含在 StyleCop 安装中,您需要适当地设置路径。

要在 TeamCity 中查看输出的 StyleCop 结果,您需要使用适当的 .xsl 文件(在上面的脚本中称为 StyleCopReport.xsl)将 .xml StyleCop 报告转换为 HTML。

要在 TeamCity 中显示 HTML 文件,您需要从此 .html 输出创建一个 artifact,然后创建一个 include that artifact in the build results

Continuous Integration in .NET 这本书是一个很好的资源。

【讨论】:

  • 我可以将我的根路径作为 Include 提供,如您所示,它会在所有子文件夹下递归迭代以查找 .cs 文件吗?另外,我最初的问题是,这将如何显示在 TeamCity 报告中?
  • 在 StyleCop (4.7) 的最新版本中,StyleCopTask 已移至 'StyleCop.dll',因此现在使用将如下所示:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多