Ejecución de un análisis en sonar con el soporte de una tarea ant.
0. Índice de contenidos.
1. Introducción
Hace poco veíamos cómo
ejecutar de tests unitarios con junit en proyectos ant y su integración en jenkins y sonar para medir la cobertura , pero…
¿y si no disponemos del soporte de jenkins?, lo bueno de jenkins es que integra sonar runner que permite lanzar los análisis en sonar por
cada build; pero si no tenemos jenkins, disponemos de otro producto de integración contínua o simplemente no
disponemos de una herramienta de integración contínua… siempre nos quedará ant.
En este tutorial vamos a exponer la configuración de una tarea ant que nos permita lanzar la ejecución de un análisis en sonar de
un proyecto gestionado con ant.
2. Entorno.
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15′ (2.4 GHz Intel Core i7, 8GB DDR3 SDRAM).
- Sistema Operativo: Mac OS X Lion 10.7.4
- Java(TM) SE Runtime Environment (build 1.7.0_11-b21)
- ANT 1.8.2
- Sonar 3.5.1
3. Configuración.
Dos pasos muy simples:
- por un lado debemos descargarnos la distribución de sonar-ant-task-2.1.jar, de la siguiente ubicación
http://docs.codehaus.org/display/SONAR/Installing+and+Configuring+SonarQube+Ant+Task
y copiar el jar en el directorio de librerías de nuestro proyecto, y - por otro lado debemos incluir una tarea en nuestro build.xml como la que sigue
<!-- Define the SonarQube target --> <target name="sonar" depends="tests"> <!-- Define the JDBC properties --> <property name="sonar.jdbc.url" value="jdbc:h2:tcp://localhost:9092/sonar" /> <property name="sonar.jdbc.username" value="sonar" /> <property name="sonar.jdbc.password" value="sonar" /> <!-- Define the SonarQube project properties --> <property name="sonar.projectKey" value="com.autentia.tutoriales:tntconcept" /> <property name="sonar.projectName" value="tntconcept analyzed with the SonarQube Ant Task" /> <property name="sonar.projectVersion" value="1.0" /> <property name="sonar.language" value="java" /> <property name="sonar.sources" value="${src.dir}" /> <property name="sonar.binaries" value="${classes.dir}" /> <property name="sonar.tests" value="${test.dir}" /> <property name="sonar.dynamicAnalysis" value="reuseReports" /> <property name="sonar.java.coveragePlugin" value="jacoco" /> <property name="sonar.jacoco.reportPath" value="bin/jacoco.exec" /> <property name="sonar.surefire.reportsPath" value="${test.dir}/reports" /> <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> <classpath path="${lib.dir}/org/codehaus/sonar/sonar-plugins/2.1/sonar-ant-task-2.1.jar" /> </taskdef> <!-- Execute Sonar --> <sonar:sonar xmlns:sonar="antlib:org.sonar.ant" /> </target>
Al igual que haríamos en la configuración de sonar runner de jenkins
debemos añadir las propiedades que permitan la ejecución en la tarea de ant, para:
- acceder a la base de datos de sonar,
- establecer la clave, descripción y versión del proyecto,
- idioma de análisis, ubicación de los fuentes, clases y tests, y, por último,
- indicar el plugin de cobertura y donde se ubican los informes generados por la tarea anterior.
Por último, nuestra tarea dependerá de la tarea de tests para que, al ejecutarse, estén disponibles las métricas de tests de junit y cobertura.
Con todo ello, dispondríamos de las métricas de calidad, incluyendo las de tests y cobertura.
4. Referencias.
- http://docs.codehaus.org/display/SONAR/Analyzing+with+SonarQube+Ant+Task
- http://docs.codehaus.org/display/SONAR/Installing+and+Configuring+SonarQube+Ant+Task
5. Conclusiones.
Ahora solo quedaría invocar a la tarea de ant bien desde el sistema de integración contínua o a demanda
desde cualquier equipo de desarrollo; para ello, con esta configuración, debemos tener acceso a la base de datos vía jdbc.
Un saludo.
Jose