Herramientas y Métodos en Ingeniería del Software. Version 1.0, Mayo-2021. Joaquín Cañadas <jjcanada@ual.es>
Integración de SonarQube con Jenkins.
-
Configurar la integración de las herramientas SonarQube y Jenkins
-
Ejecutar el análisis de SonarQube desde Jenkins
-
Visualizar los resultados del análisis de SonarQube
1. Introducción a SonarQube
SonarQube (conocido anteriormente como Sonar) es una herramienta para evaluar la calidad del código fuente. Es software libre y usa diversas herramientas de análisis estático de código fuente como Checkstyle, PMD o FindBugs para obtener métricas que pueden ayudar a mejorar la calidad del código de un programa:
-
Informa sobre código duplicado, estándares de codificación, pruebas unitarias, cobertura de código, complejidad ciclomática, errores potenciales, comentarios y diseño del software.
-
Aunque inicialmente fue pensado para Java, acepta otros lenguajes mediante extensiones.
-
Se integra con Maven, Ant y herramientas de integración continua como Atlassian Bamboo, Jenkins y Hudson.
SonarQube como plataforma web ofrece dos versiones principales de uso:
-
SonarQube on premise: permite instalar SonarQube en cualquier ordenador o servidor en la nube. La versión Community es gratuita y open source.
-
SonarCloud: SonarQube ofrecido como software como servicio disponible en la URL https://sonarcloud.io/ y gratuita para proyectos de código abierto.
Además, SonarLint es una extensión para los principales IDEs que ayuda a detectar y corregir los problemas de calidad a la vez que escribes código fuente.
En esta actividad nos vamos a centrar en integrar SonarQube on premise que hemos instalado en una máquina virtual en Azure, con Jenkins.
2. Configuración de la integración entre Jenkins y SonarQube

-
El primer paso es crear un token en SonarQube para el usuario. Para ello, en SonarQube, creamos un nuevo usuario:
userjenkins
. Para administrar usuarios y grupos, una vez logueado comoadmin
elige Administration > Security. Añade el usuariouserjenkins
, que de forma predeterminada se añade al gruposonar-users
.

Accede con usuario userjenkins
en SonarQube y en su perfil, crea un token y guardalo para usarlo después.

-
En Jenkins, instalamos el plugin SonarQube Scanner.

-
Una vez instalado el plugin de SonarQube, lo configuramos: Administrar Jenkins > Configurar el Sistema, y bajamos hasta la sección SonarQube Servers. Marca la opción
Environment variables Enable injection of SonarQube server configuration as build environment variables
. Añadimos un nuevo SonarQube, damos un nombre al servidor, la URL de SonarQube, y añadimos la credencial de acceso al servidor mediante una nueva credencial de tipo Secret Text usando el token de autenticación. Dale el ID a la credencial:sonar_server


-
A continuación debemos añadir la instalación de SonarQube Scanner en Administrar Jenkins > Global Tool configuration. Seleccionamos la última version que se instale automáticamente.

3. Añadir SonarQube a un proyecto Jenkins
3.1. Proyecto tipo Maven
-
En el archivo pom.xml tenemos que incorporar el plugin de SonarQube en el bloque
<build>
.
<build>
...
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.0.2155</version>
</plugin>
...
</build>
-
En la configuración del proyecto Jenkins, en la sección
Entorno de Ejecución
, marcamos la opción:Prepare SonarQube Scanner environment
, y seleccionamos el token en el desplegable.

-
En los Goals de Maven, añadimos
sonar:sonar
al final de lista de goals. -
Tras la ejecución, aparecerán los resultados de SonarQube. En el proyecto se mostrará una etiqueta con el valor del Quality Gate encontrado en el análisis. Haciendo clic en el enlace nos lleva al resultado detallado del análisis.

Ejemplos de Maven y SonarQube
En el repositorio de GitHub sonar-scanning-examples hay disponibles varios ejemplos para probar el funcionamiento de SonarQube. Podemos usar los proyectos Java con Maven para probar el funcionamiento de SonarQube. Sin embargo, en estos proyectos está configurado Java 11 en el pom.xml, por lo que la construcción en nuestro Jenkins fallará ya que solamente tenemos instalado JDK 1.8. Si quieres probar estos ejemplos, aquí tienes las instrucciones para instalar Java 11 en Jenkins. |
3.2. Proyecto tipo Pipeline
Añade una nueva fase al pipeline:
stage('SonarQube analysis') {
steps {
withSonarQubeEnv(credentialsId: 'sonar_server', installationName: 'servidor_sonarqube') { (1)
sh 'mvn sonar:sonar' (2)
}
}
}
1 | Usando el ID de la credencial creada en Jenkins con el token de acceso a SonarQube, en la figura 5 se le dió el id sonar_server , y el nombre del servidor de SonarQube configurado en Jenkins. |
2 | Utiliza mvn -f carpeta/pom.xml sonar:sonar si es necesario. |

Alternativamente, se puede añadir a continuación una nueva fase que establezca el pipeline a UNSTABLE
si falla el Quality Gate.
stage("Quality Gate") {
steps {
timeout(time: 1, unit: 'HOURS') {
// Parameter indicates whether to set pipeline to UNSTABLE if Quality Gate fails
// true = set pipeline to UNSTABLE, false = don't
waitForQualityGate abortPipeline: true
}
}
}
4. Análisis SonarQube desde Eclipse
Si deseas ejecutar el análisis de SonarQube desde Eclipse, debes llamar a la construcción maven el goal sonar:sonar
y los parámetros siguientes:
sonar:sonar -Dsonar.host.url=http://sonarqube_server_url:9000 -Dsonar.login=user-token
Más info de como usar SonarQube en Eclipse, y SonarQube en baeldung.com.
5. FAQ y resolución de problemas (thoubleshouting)
En esta sección se añadirán soluciones a los problemas más habituales.