如何在TeamCity中使用StyleCop
有人成功地从TeamCity运行StyleCop吗 我知道StyleCop支持命令行模式,但我不确定这将如何集成到TeamCity的报告输出中 我已经签出了在这里找到的这个插件: 但是,它无法运行如何在TeamCity中使用StyleCop,teamcity,stylecop,Teamcity,Stylecop,有人成功地从TeamCity运行StyleCop吗 我知道StyleCop支持命令行模式,但我不确定这将如何集成到TeamCity的报告输出中 我已经签出了在这里找到的这个插件: 但是,它无法运行 我正在使用TeamCity 6.5.1(最新版本)。我不知道您对MSBuild有多熟悉,但您应该能够在TC 6及更高版本中添加新的生成步骤,并将MSBuild设置为生成运行程序,并将其指向一个.proj文件,该文件执行类似于以下操作: <Target Name="StyleCop">
我正在使用TeamCity 6.5.1(最新版本)。我不知道您对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>
Microsoft.StyleCop.dll
包含在StyleCop安装中,您需要适当地设置路径
要在TeamCity中查看输出的StyleCop结果,需要使用适当的.xsl文件(在上面的脚本中称为StyleCopReport.xsl)将.xml StyleCop报告转换为HTML
要在TeamCity中显示HTML文件,您需要从这个.HTML输出创建一个HTML文件,然后单击
这本书是一个很好的资源。您知道teamcity仅从msbuild提供特定属性吗? 不需要服务消息,请参阅: 因此,您不必添加自定义报告页。 使用构建统计信息,例如
<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是您的样式构建。有一个(新的?)第三方TeamCity插件用于StyleCop(尽管我还没有尝试过)
更新:据我所知,最新版本只适用于TeamCity 7(或者我做错了什么)。另外,我有一个非常慢的(虚拟)构建服务器,所以即使在重新启动服务之后,StyleCop运行程序也需要一段时间才能出现在web界面中
我做的另一件蠢事是没有正确阅读自述文件:你必须解压下载的zip文件,然后使用里面的zip文件
我最初也只是在“Include”选项中列出了一个.cs文件列表(对于构建步骤),但这并不起作用;sln或csproj文件的链接确实有效。我来晚了,但实现这一点的一个非常简单的方法是在任何您希望使用StyleCop分析的项目中安装NuGet软件包 安装包后,无论在何处或如何调用,StyleCop分析都将在您执行的每个构建上运行,例如VS、命令行、msbuild、psake、rake、fake、bake、nant、构建服务器等。无需特殊操作 如果您希望在StyleCop规则被破坏时生成失败,您只需要在每个适当的生成配置下将以下元素添加到项目文件中,例如
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
...
假的
...
同样,无论在何处以及如何调用,这将在每个生成上都有效。您是否使用MSBuild作为生成运行程序?我使用的是Visual Studio SLN运行程序。@Benjol的回答中隐藏着以下非常有用的注释:“我没有正确阅读自述文件的另一件蠢事是:您必须解压缩下载的zip,用里面的拉链-这把我弄糊涂了!我是否可以像您所示的那样,将根路径作为Include提供,并且它将在所有子文件夹下递归迭代以查找.cs文件?另外,我最初的问题是,这将如何在TeamCity报告中显示?在StyleCop(4.7)的最后一个版本中,StyleCopTask移到了“StyleCop.dll”,因此使用将现在看起来是这样的:很好,我将chrck掉它。在TC GUI中也可以这样做吗?前两个用于常规msbuild,您需要在每个msbuild上使用一个条件,这样它就不会破坏任何手动生成—只有在TC内部运行时才能工作。在server config folder.cool上,图形是文本编辑的,但是添加到每个项目还是有点麻烦,你不这么认为吗?你可以一次将包添加到解决方案中的所有项目中,就像任何其他NuGet包一样。如果您想让构建在冲突中失败,那么是的,您必须手动将该元素添加到每个项目中。但是,该步骤是可选的-在接受的答案中,每个项目都有一个强制性的手动步骤;-)@AdamRalph使用此方法,如果存在任何错误,如何将StyleCop分析的结果输出到TeamCity内部进行可视化?谢谢我没有做什么特别的事。我只是让消息进入日志并从那里检查它们。在我的日常工作中,我们无法建立在违规的基础上,因此我们不得不仔细查看日志并修复它们。对于OSS,当我在VS.Gotcha中本地看到它们时,我让它们通过并修复它们,这是有意义的。如果构建无法在您自己的机器上本地工作,您将永远(即不应该)无法提交任何内容,那么在TeamCity中报告结果有什么意义呢。我可以接受。谢谢在TC8中不起作用,除非我像你一样做错了什么。说明是错误的,因为下载中没有stylecop.zip,您必须这样做。不管怎样,这不管用。。。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
...