{"id":706,"date":"2013-09-17T17:03:38","date_gmt":"2013-09-17T16:03:38","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=706"},"modified":"2013-09-18T20:29:10","modified_gmt":"2013-09-18T19:29:10","slug":"sonarqube-servicio-windows-jenkins-tomcat","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/sonarqube-servicio-windows-jenkins-tomcat\/","title":{"rendered":"SonarQube en servicio Windows con Jenkins en Tomcat"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1126\" alt=\"SonarQube2\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQube2.jpg\" width=\"233\" height=\"350\" \/><\/a> Hemos visto en nuestro \u00faltimo post c\u00f3mo <a href=\"http:\/\/qualilogy.com\/es\/migrar-sonarqube-tomcat-a-servicio-windows\/\" target=\"_blank\">migrar SonarQube<\/a>\u00a0de Tomcat a un servicio Windows.\u00a0De hecho hicimos una nueva instalaci\u00f3n sin perder nuestro repositorio, creado con la versi\u00f3n de SonarQube bajo Tomcat. Hemos verificado que nuestros proyectos, los resultados de los anteriores an\u00e1lisis, pero tambi\u00e9n toda la configuraci\u00f3n existente (plugins, perfiles de calidad, etc.) estaban presentes.<\/p>\n<p>Bueno. Pero \u00bfqu\u00e9 pasa con Jenkins? Nuestro Jenkins bajo Tomcat trabajaba con la versi\u00f3n SonarQube Tomcat. Ahora tenemos que configurarlo para que siga adelante con nuestro servicio de Windows SonarQube.<\/p>\n<p>\u00bfC\u00f3mo proceder? Estos son los pasos que he seguido.\u00a0<!--more--><\/p>\n<h2><\/h2>\n<h2>D\u00e9sinstalar SonarQube de Tomcat<\/h2>\n<p>La primera etapa fue eliminar el SonarQube que se encuentra en una webapps de Tomcat. Para ello, simplemente:<\/p>\n<ol>\n<li>Abrir el directorio de las webaps en Tomcat \u2013\u00a0<strong>C:\\Program Files (x86)\\Apache Software Foundation\\Tomcat 7.0\\webapps<\/strong>\u00a0\u2013\u00a0en mi ordenador.<\/li>\n<li>Suprimir el fichero &#8216;Sonar.war&#8217; y el sub-directorio &#8216;Sonar&#8217; en esta carpeta.<\/li>\n<\/ol>\n<p>Claro, hay que parar el servicio Tomcat de Windows antes de realizar esta operaci\u00f3n.<\/p>\n<h2>Ejecutar un an\u00e1lisis con Jenkins bajo Tomcat<\/h2>\n<p>Ahora voy a intentar un an\u00e1lisis con Jenkins. Este paso no es obligatorio, y tampoco tiene sentido: nuestra instalaci\u00f3n actual de Jenkins conoce \u00fanicamente la versi\u00f3n SonarQube de Tomcat, que acabamos de eliminar.<\/p>\n<p>Pero como lo hemos visto en el <a href=\"http:\/\/qualilogy.com\/es\/migrar-sonarqube-tomcat-a-servicio-windows\/\" target=\"_blank\">post anterior<\/a>, SonarQube se basa en su propio repositorio,\u00a0es decir, su propio esquema de base de datos de esquema, y el actual Jenkins en Tomcat sabe c\u00f3mo alimentarlo.<\/p>\n<p>Pues voy a:<\/p>\n<ol>\n<ol>\n<ol>\n<li><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/StartTomcat.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1133\" alt=\"StartTomcat\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/StartTomcat.jpg\" width=\"308\" height=\"67\" \/><\/a>Arrancar el servicio Windows de Tomcat.<\/li>\n<li>Iniciar un an\u00e1lisis existente en Jenkins, con una modificaci\u00f3n de la versi\u00f3n de este projecto.<\/li>\n<\/ol>\n<\/ol>\n<\/ol>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarConf.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1136\" alt=\"JenkinsSonarConf\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarConf.jpg\" width=\"300\" height=\"209\" \/><\/a>Lo realizamos simplemente con un click en el men\u00fa desplegable que aparece a la derecha del nombre del enlace \/ del proyecto, y en este men\u00fa, seleccionamos &#8216;Configure&#8217;.<\/p>\n<p>Eleg\u00ed aqu\u00ed una aplicaci\u00f3n (en realidad diferentes aplicaciones) de c\u00f3digo ABAP (SAP). En la siguiente ventana de configuraci\u00f3n de mi an\u00e1lisis en Jenkins, voy a cambiar la versi\u00f3n del proyecto para incrementar esta a versi\u00f3n 2.0.<\/p>\n<p>No se olvide de guardar la nueva configuraci\u00f3n antes de iniciar de nuevo este an\u00e1lisis.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarProjectPropVersion.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1137\" alt=\"SonarProjectPropVersion\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarProjectPropVersion.jpg\" width=\"580\" height=\"76\" \/><\/a><\/p>\n<p>Una vez esta ejecutada, podemos comprobar que funcion\u00f3 bien, mostrando la versi\u00f3n 2.0 en el dashboard SonarQube (en servicio Windows) &#8230;<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarAbapV2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1142\" alt=\"SonarAbapV2\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarAbapV2.jpg\" width=\"551\" height=\"51\" \/><\/a><\/p>\n<p>&#8230; cuando mi actual Jenkins todav\u00eda esta configurado con la versi\u00f3n Tomcat de SonarQube :<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarJenkinsV2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1143\" alt=\"SonarJenkinsV2\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarJenkinsV2.jpg\" width=\"474\" height=\"72\" \/><\/a><\/p>\n<p>De nuevo, nada extra\u00f1o, ya que los resultados de an\u00e1lisis siempre se almacenan en el repositorio de SonarQube, el esquema &#8216;Sonar&#8217; en la base de datos (Oracle, en mi caso).<\/p>\n<h2>Configurar Jenkins (Tomcat) con SonarQube en servicio Windows<\/h2>\n<p><a style=\"line-height: 1.714285714;font-size: 1rem\" href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsConfSystem.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1147\" alt=\"JenkinsConfSystem\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsConfSystem.jpg\" width=\"274\" height=\"49\" \/><\/a><\/p>\n<p>En la ventana de configuraci\u00f3n de Jenkins (&#8216;Manage Jenkins&#8217;), seleccionamos el men\u00fa &#8216;Configure System&#8217;.<\/p>\n<p>En la siguiente ventana, encontramos la secci\u00f3n para la configuraci\u00f3n de Sonar en Jenkins, y activamos el bot\u00f3n\u00a0&#8216;Advanced&#8230;&#8217;.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarConfig.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1149\" alt=\"JenkinsSonarConfig\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarConfig.jpg\" width=\"550\" height=\"159\" \/><\/a>En la pagina de configuraci\u00f3n de SonarQube, indicamos la url del dashboard de SonarQube, que ha cambiado con la <a href=\"http:\/\/qualilogy.com\/es\/migrar-sonarqube-tomcat-a-servicio-windows\/\" target=\"_blank\">instalaci\u00f3n de SonarQube en un servicio Windows<\/a>).<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarUrl.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1150\" alt=\"JenkinsSonarUrl\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarUrl.jpg\" width=\"496\" height=\"108\" \/><\/a><\/p>\n<p><strong>Importante<\/strong>: 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.<\/p>\n<p>No olvidemos de guardar los cambios de par\u00e1metros con el bot\u00f3n &#8216;Save&#8217; en la parte inferior de la p\u00e1gina.<\/p>\n<p>Jenkins trabaja con el SonarQube Runner para ejecutar un an\u00e1lisis. Hemos visto como implementarlo en el post &#8216;<a style=\"line-height: 1.714285714;font-size: 1rem\" href=\"http:\/\/qualilogy.com\/es\/instalar-sonarqube-sonarqube-runner\/\" target=\"_blank\">Instalar SonarQube &#8211; SonarQube Runner<\/a>&#8216;. Y entonces hemos visto como\u00a0configurar el SonarQube Runner con todos los par\u00e1metros necesarios para su correcto funcionamiento, en el archivo &#8216;sonar runner.properties&#8217;.<\/p>\n<p>Ahora, vamos a indicar en este fichero la nueva url del portal SonarQube, como anteriormente en Jenkins.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrlOk.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1152\" alt=\"SonarQubeSonarUrlOk\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrlOk.jpg\" width=\"377\" height=\"60\" \/><\/a><\/p>\n<p>Puedes ver la url anterior para el SonarQube Tomcat, en comentario. Y\u00a0la barra final en la nueva url, para el SonarQube en servicio Windows.<\/p>\n<p>Vamos a arrancar un nuevo an\u00e1lisis: el log en la consola Jenkins (&#8216;Console Output&#8217;) debe mencionar el siguiente mensaje, cuando finaliza el anal\u00edsis:<\/p>\n<pre><strong>ANALYSIS SUCCESSFUL, you can browse http:\/\/localhost:9000<\/strong><\/pre>\n<p>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\u00e1lisis.<\/p>\n<p>Pero no olvides arrancar el servicio Windows de SonarQube primero.<\/p>\n<h2>Posibles errores<\/h2>\n<p>Experiment\u00e9 con diferentes combinaciones de instalaci\u00f3n de SonarQube y Jenkins en Tomcat o servicios Windows, y encontr\u00e9 algunos errores. Voy a presentar dos de ellos aqu\u00ed, porque creo que ser\u00e1 bastante frecuente encontrarlos. Y se va a entender por qu\u00e9 insisto en poner la barra al final de la url del portal SonarQube.<\/p>\n<p>Si se encuentra con el siguiente mensaje de error:<\/p>\n<pre><strong>The current batch process and the configured remote server do not share the same DB configuration.<\/strong>\r\n<strong> - Batch side: jdbc:oracle:thin:@localhost:1521\/JPORA11 (sonar \/ *****) <\/strong>\r\n<strong> - Server side: check the configuration at http:\/\/localhost:9000\/system<\/strong><\/pre>\n<p>Compruebe que has especificado exactamente la misma url en la configuraci\u00f3n de SonarQube en Jenkins y en el &#8216;sonar runner.properties&#8217; de SonarQube Runner.<\/p>\n<p>Si se encuentra con el siguiente mensaje de error:<\/p>\n<pre><strong>Exception in thread \"main\" java.lang.IllegalStateException: Fail to request server version<\/strong>\r\n<strong> at org.sonar.runner.Bootstrapper.getServerVersion(Bootstrapper.java:73)<\/strong>\r\n<strong>...<\/strong>\r\n<strong>caused by: java.net.ConnectException: Connection refused: connect<\/strong>\r\n<strong> at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)<\/strong>\r\n<strong>...<\/strong>\r\n<strong> at java.net.URLConnection.getContent(URLConnection.java:748)<\/strong>\r\n<strong> at org.sonar.runner.Bootstrapper.remoteContent(Bootstrapper.java:125)<\/strong>\r\n<strong> at org.sonar.runner.Bootstrapper.getServerVersion(Bootstrapper.java:71)<\/strong>\r\n<strong> ... 4 more<\/strong>\r\n<strong>Finished: SUCCESS<\/strong><\/pre>\n<p>Primero comprobar que\u00a0<strong>has arrancado el servicio Windows de SonarQube<\/strong>.\u00a0Creo que este error ser\u00e1 bastante com\u00fan (al menos en mi experiencia de distra\u00eddo cr\u00f3nico).<\/p>\n<p>Compruebe las direcciones URL y la presencia de la barra final en el &#8216;sonar runner.properties&#8217; de configuraci\u00f3n del Runner SonarQube.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrl.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1151\" alt=\"SonarQubeSonarUrl\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrl.jpg\" width=\"395\" height=\"122\" \/><\/a><\/p>\n<p>El tiene un problema para trabajar con esa\u00a0url sin la barra final.<\/p>\n<p>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\u00f3n larga antes de pensar en la adici\u00f3n de la barra final.<\/p>\n<p>El pr\u00f3ximo post ser\u00e1 dedicado a la instalaci\u00f3n de Jenkins en un servicio Windows. Y finalmente deshacernos del Tomcat.<\/p>\n<p>Hasta luego.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hemos visto en nuestro \u00faltimo post c\u00f3mo migrar SonarQube\u00a0de Tomcat a un servicio Windows.\u00a0De hecho hicimos una nueva instalaci\u00f3n sin perder nuestro repositorio, creado con la versi\u00f3n de SonarQube bajo Tomcat. Hemos verificado que nuestros proyectos, los resultados de los anteriores an\u00e1lisis, pero tambi\u00e9n toda la configuraci\u00f3n existente (plugins, perfiles de calidad, etc.) estaban presentes. [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-706","post","type-post","status-publish","format-standard","hentry","category-sonar-instalacion"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/706"}],"collection":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/comments?post=706"}],"version-history":[{"count":14,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/706\/revisions"}],"predecessor-version":[{"id":709,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/706\/revisions\/709"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=706"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=706"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=706"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}