Cómo usar StyleCop con TeamCity
(4)
¿Alguien ha tenido éxito con la ejecución de StyleCop desde TeamCity?
Sé que StyleCop admite un modo de línea de comandos, sin embargo, no estoy seguro de cómo se integrará esto en la salida del informe de TeamCity.
He comprobado este complemento que se encuentra aquí: https://bitbucket.org/metaman/teamcitydotnetcontrib/src/753712db5df7/stylecop/
Sin embargo no se pudo poner en marcha.
Estoy usando TeamCity 6.5.1 (más reciente).
¿Sabías que teamcity proporciona propiedades específicas solo desde msbuild? No necesita los mensajes de servicio, consulte: http://confluence.jetbrains.net/display/TCD65/MSBuild+Service+Tasks
Por lo tanto, no es necesario agregar una página de informe personalizada. Utilice las estadísticas de compilación, por ejemplo
<TeamCitySetStatus Status="$(AllPassed)" Text="Violations: $(StyleCopViolations)" />
A continuación, puede registrar la estadística también:
<TeamCityReportStatsValue Key="StyleCopViolations" Value="$(StyleCopViolations)" />
Y luego cree un gráfico personalizado para mostrar, y ya tiene las violaciones en su salida de msbuild. Edite main-config.xml y agregue:
<graph title="Style Violations" seriesTitle="Warning">
<valueType key="StyleCopViolations" title="Violations" buildTypeId="bt20"/>
</graph>
Donde buildTypeId = "bt20" bt20 es tu compilación de estilo.
Aquí hay un complemento TeamCity de terceros para StyleCop (aunque todavía no lo he probado).
ACTUALIZACIÓN: por lo que puedo decir, la última versión solo funciona con TeamCity 7 (o hice algo mal). Además, tengo un servidor de compilación muy lento (virtual), por lo que incluso después de reiniciar los servicios, el corredor StyleCop tardó un tiempo en aparecer en la interfaz web.
Otra cosa estúpida que hice fue no leer el archivo Léame correctamente: tienes que descomprimir el zip descargado y usar el zip en el interior .
También empecé originalmente con solo una lista de archivos .cs en la opción "Incluir" (para el paso de compilación), pero eso no funcionó; Sin embargo, los enlaces a archivos sln o csproj funcionan.
Llego tarde al programa, pero una forma muy fácil de lograrlo es instalar el paquete StyleCop.MSBuild NuGet en cualquier proyecto que desee analizar con StyleCop.
Después de instalar el paquete, el análisis de StyleCop se ejecutará en cada compilación que haga, independientemente de dónde o cómo se invoque, por ejemplo, VS, línea de comandos, msbuild, psake, rake, falso, horneado, nant, servidor de compilación, etc. No hay acciones especiales son requeridos.
Si desea que la compilación falle cuando se rompen las reglas de StyleCop, solo necesita agregar el siguiente elemento a su archivo de proyecto en cada configuración de compilación apropiada, por ejemplo:
<PropertyGroup Condition=" ''$(Configuration)|$(Platform)'' == ''Debug|AnyCPU'' ">
<StyleCopTreatErrorsAsWarnings>false</StyleCopTreatErrorsAsWarnings>
...
De nuevo, esto funcionará en cada compilación, independientemente de dónde y cómo se invoque.
No sé cuán familiarizado está con MSBuild, pero debería poder agregar un nuevo Paso de compilación en TC 6 y superior, y configurar MSBuild como el corredor de compilación, y señalarlo a un archivo .proj que haga algo similar a el seguimiento:
<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>
Si no quiere fallar la compilación en un error de StyleCop, entonces configure la tarea de Error
como Warning
.
También deberá agregar lo siguiente a su archivo .proj:
<UsingTask TaskName="StyleCopTask" AssemblyFile="$(StyleCopTasksPath)/Microsoft.StyleCop.dll" />
Microsoft.StyleCop.dll
se incluye en la instalación de StyleCop, y deberá configurar sus rutas de manera apropiada.
Para ver los resultados de StyleCop generados en TeamCity, deberá transformar el informe de StyleCop .xml a HTML utilizando un archivo .xsl apropiado (denominado StyleCopReport.xsl en el script anterior).
Para mostrar el archivo HTML en TeamCity, deberá crear un artifact partir de esta salida .html y luego incluir ese artefacto en los resultados de la compilación .
El libro Integración continua en .NET es un gran recurso.