SonarQube en servicio Windows con Jenkins en Tomcat

SonarQube2 Hemos visto en nuestro último post cómo migrar SonarQube de Tomcat a un servicio Windows. De hecho hicimos una nueva instalación sin perder nuestro repositorio, creado con la versión de SonarQube bajo Tomcat. Hemos verificado que nuestros proyectos, los resultados de los anteriores análisis, pero también toda la configuración existente (plugins, perfiles de calidad, etc.) estaban presentes.

Bueno. Pero ¿qué pasa con Jenkins? Nuestro Jenkins bajo Tomcat trabajaba con la versión SonarQube Tomcat. Ahora tenemos que configurarlo para que siga adelante con nuestro servicio de Windows SonarQube.

¿Cómo proceder? Estos son los pasos que he seguido. 

Désinstalar SonarQube de Tomcat

La primera etapa fue eliminar el SonarQube que se encuentra en una webapps de Tomcat. Para ello, simplemente:

  1. Abrir el directorio de las webaps en Tomcat – C:\Program Files (x86)\Apache Software Foundation\Tomcat 7.0\webapps – en mi ordenador.
  2. Suprimir el fichero ‘Sonar.war’ y el sub-directorio ‘Sonar’ en esta carpeta.

Claro, hay que parar el servicio Tomcat de Windows antes de realizar esta operación.

Ejecutar un análisis con Jenkins bajo Tomcat

Ahora voy a intentar un análisis con Jenkins. Este paso no es obligatorio, y tampoco tiene sentido: nuestra instalación actual de Jenkins conoce únicamente la versión SonarQube de Tomcat, que acabamos de eliminar.

Pero como lo hemos visto en el post anterior, SonarQube se basa en su propio repositorio, es decir, su propio esquema de base de datos de esquema, y el actual Jenkins en Tomcat sabe cómo alimentarlo.

Pues voy a:

      1. StartTomcatArrancar el servicio Windows de Tomcat.
      2. Iniciar un análisis existente en Jenkins, con una modificación de la versión de este projecto.

JenkinsSonarConfLo realizamos simplemente con un click en el menú desplegable que aparece a la derecha del nombre del enlace / del proyecto, y en este menú, seleccionamos ‘Configure’.

Elegí aquí una aplicación (en realidad diferentes aplicaciones) de código ABAP (SAP). En la siguiente ventana de configuración de mi análisis en Jenkins, voy a cambiar la versión del proyecto para incrementar esta a versión 2.0.

No se olvide de guardar la nueva configuración antes de iniciar de nuevo este análisis.

SonarProjectPropVersion

Una vez esta ejecutada, podemos comprobar que funcionó bien, mostrando la versión 2.0 en el dashboard SonarQube (en servicio Windows) …

SonarAbapV2

… cuando mi actual Jenkins todavía esta configurado con la versión Tomcat de SonarQube :

SonarJenkinsV2

De nuevo, nada extraño, ya que los resultados de análisis siempre se almacenan en el repositorio de SonarQube, el esquema ‘Sonar’ en la base de datos (Oracle, en mi caso).

Configurar Jenkins (Tomcat) con SonarQube en servicio Windows

JenkinsConfSystem

En la ventana de configuración de Jenkins (‘Manage Jenkins’), seleccionamos el menú ‘Configure System’.

En la siguiente ventana, encontramos la sección para la configuración de Sonar en Jenkins, y activamos el botón ‘Advanced…’.

JenkinsSonarConfigEn la pagina de configuración de SonarQube, indicamos la url del dashboard de SonarQube, que ha cambiado con la instalación de SonarQube en un servicio Windows).

JenkinsSonarUrl

Importante: he entrado la nueva url de SonarQube sin la barra (o slash) final. Eso va a funcionar sin problema, pero te sugiero normalizar esta url con una barra final.

No olvidemos de guardar los cambios de parámetros con el botón ‘Save’ en la parte inferior de la página.

Jenkins trabaja con el SonarQube Runner para ejecutar un análisis. Hemos visto como implementarlo en el post ‘Instalar SonarQube – SonarQube Runner‘. Y entonces hemos visto como configurar el SonarQube Runner con todos los parámetros necesarios para su correcto funcionamiento, en el archivo ‘sonar runner.properties’.

Ahora, vamos a indicar en este fichero la nueva url del portal SonarQube, como anteriormente en Jenkins.

SonarQubeSonarUrlOk

Puedes ver la url anterior para el SonarQube Tomcat, en comentario. Y la barra final en la nueva url, para el SonarQube en servicio Windows.

Vamos a arrancar un nuevo análisis: el log en la consola Jenkins (‘Console Output’) debe mencionar el siguiente mensaje, cuando finaliza el analísis:

ANALYSIS SUCCESSFUL, you can browse http://localhost:9000

Bueno, no he podido conseguir que la url en este mensaje tenga la barra (slash) final, pero no te preocupes, que puedes hacer click en este enlace para ir directamente en el dashboard SonarQube y ver el resultado del análisis.

Pero no olvides arrancar el servicio Windows de SonarQube primero.

Posibles errores

Experimenté con diferentes combinaciones de instalación de SonarQube y Jenkins en Tomcat o servicios Windows, y encontré algunos errores. Voy a presentar dos de ellos aquí, porque creo que será bastante frecuente encontrarlos. Y se va a entender por qué insisto en poner la barra al final de la url del portal SonarQube.

Si se encuentra con el siguiente mensaje de error:

The current batch process and the configured remote server do not share the same DB configuration.
 - Batch side: jdbc:oracle:thin:@localhost:1521/JPORA11 (sonar / *****) 
 - Server side: check the configuration at http://localhost:9000/system

Compruebe que has especificado exactamente la misma url en la configuración de SonarQube en Jenkins y en el ‘sonar runner.properties’ de SonarQube Runner.

Si se encuentra con el siguiente mensaje de error:

Exception in thread "main" java.lang.IllegalStateException: Fail to request server version
 at org.sonar.runner.Bootstrapper.getServerVersion(Bootstrapper.java:73)
...
caused by: java.net.ConnectException: Connection refused: connect
 at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
...
 at java.net.URLConnection.getContent(URLConnection.java:748)
 at org.sonar.runner.Bootstrapper.remoteContent(Bootstrapper.java:125)
 at org.sonar.runner.Bootstrapper.getServerVersion(Bootstrapper.java:71)
 ... 4 more
Finished: SUCCESS

Primero comprobar que has arrancado el servicio Windows de SonarQube. Creo que este error será bastante común (al menos en mi experiencia de distraído crónico).

Compruebe las direcciones URL y la presencia de la barra final en el ‘sonar runner.properties’ de configuración del Runner SonarQube.

SonarQubeSonarUrl

El tiene un problema para trabajar con esa url sin la barra final.

De todos modos, si has seguido los pasos de este post y se produce un error, compruebe la url tanto en Jenkins y en el SonarQube Runner. Puede resultar una investigación larga antes de pensar en la adición de la barra final.

El próximo post será dedicado a la instalación de Jenkins en un servicio Windows. Y finalmente deshacernos del Tomcat.

Hasta luego.

Esta entrada está también disponible en Lire cet article en français y Read that post in english.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *