Как использовать StyleCop с TeamCity
Кто-нибудь имел успех с запуском StyleCop от TeamCity?
Я знаю, что StyleCop поддерживает режим командной строки, однако я не уверен, как это будет интегрироваться в вывод отчета TeamCity.
Я проверил этот плагин, найденный здесь: https://bitbucket.org/metaman/teamcitydotnetcontrib/src/753712db5df7/stylecop/
Однако он не смог запустить его.
Я использую TeamCity 6.5.1 (последний).
Ответы
Ответ 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>
Если вы не хотите сбой сборки на ошибке StyleCop, установите вместо этого задачу Error
Warning
.
Вам также необходимо добавить в файл .proj следующее:
<UsingTask TaskName="StyleCopTask" AssemblyFile="$(StyleCopTasksPath)\Microsoft.StyleCop.dll" />
Microsoft.StyleCop.dll
включен в установку StyleCop, и вам необходимо правильно установить пути.
Чтобы увидеть выведенные результаты StyleCop в TeamCity, вам нужно будет преобразовать отчет .xml StyleCop в HTML с помощью соответствующего .xsl файла (называемого StyleCopReport.xsl в script выше).
Чтобы отобразить HTML файл в TeamCity, вам нужно создать artifact из этого вывода .html, а затем включить этот артефакт в результаты сборки.
Непрерывная интеграция в .NET - отличный ресурс.
Ответ 2
Знаете ли вы, что 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 - это ваша сборка стиля.
Ответ 3
Я опаздываю на шоу здесь, но очень простой способ добиться этого - установить StyleCop.MSBuild пакет NuGet в любом проекте которые вы хотите проанализировать с помощью StyleCop.
После установки пакета анализ StyleCop будет выполняться на каждой вашей сборке независимо от того, где и как вызывается, например, VS, командной строки, msbuild, psake, rake, fake, bake, nant, build server и т.д. Никаких специальных действий не требуется.
Если вы хотите, чтобы сборка завершилась неудачей при нарушении правил StyleCop, вам просто нужно добавить следующий файл в файл проекта в каждой соответствующей конфигурации сборки, например.
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
...
Опять же, это будет работать на каждой сборке независимо от того, где и как она вызывается.
Ответ 4
Там (новый?) сторонний плагин TeamCity для StyleCop здесь (хотя я еще не пробовал).
UPDATE:, насколько я могу судить, последняя версия работает только с TeamCity 7 (или я сделал что-то не так). Кроме того, у меня очень медленный (виртуальный) сервер сборки, поэтому даже после перезапуска служб потребовалось некоторое время, чтобы бегун StyleCop появился в веб-интерфейсе.
Другая глупая вещь, которую я сделал, не читала readme должным образом: вам нужно разархивировать загруженный zip и использовать zip внутри.
Я также начал с простого списка файлов .cs в опции "Включить" (для шага сборки), но это не сработало; ссылки на файлы sln или csproj действительно работают.