{"id":449,"date":"2013-04-21T11:43:01","date_gmt":"2013-04-21T10:43:01","guid":{"rendered":"http:\/\/qualilogy.com\/es\/?p=449"},"modified":"2013-09-01T18:31:25","modified_gmt":"2013-09-01T17:31:25","slug":"instalar-sonarqube-analis-con-sonarqube-runner","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/es\/instalar-sonarqube-analis-con-sonarqube-runner\/","title":{"rendered":"Instalar SonarQube &#8211; An\u00e1lisis con SonarQube Runner"},"content":{"rendered":"<p><a href=\"http:\/\/vicken.deviantart.com\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-718\" alt=\"SonarRunner1\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunner1A.jpg\" width=\"350\" height=\"305\" \/><\/a>Hemos instalado anteriormente el <a title=\"El portal Sonar\" href=\"http:\/\/qualilogy.com\/es\/instalar-sonar-la-webapp-sonar\/\" target=\"_blank\">portal SonarQube<\/a>\u00a0con Tomcat, y el <a title=\"Sonar Runner\" href=\"http:\/\/qualilogy.com\/es\/instalar-sonar-sonar-runner\/\" target=\"_blank\">SonarQube Runner<\/a>, que nos permitir\u00e1 realizar nuestro primer an\u00e1lisis.<\/p>\n<p>En la carpeta de instalaci\u00f3n de SonarQube Runner, tenemos tres directorios:<\/p>\n<ul>\n<li>Un directorio &#8216;..\\lib&#8217; con un .jar necesario para la ejecuci\u00f3n del SonarQube-Runner.<\/li>\n<li>Un directorio &#8216;..\\conf&#8217; con el archivo\u00a0 sonar runner.properties&#8217; dedicado a configurar la conexi\u00f3n con SonarQube y nuestra base de datos.<\/li>\n<li>Un directorio &#8216;..\\bin&#8217; d\u00f3nde est\u00e1 el archivo &#8216;sonar runner.bat` que nos permite ejecutar un an\u00e1lisis.<\/li>\n<\/ul>\n<p>Antes de configurarlo este fichero, hagamos una pausa para reflexionar sobre la organizaci\u00f3n de nuestro entorno de an\u00e1lisis.<\/p>\n<p><!--more--><\/p>\n<h2>Entorno de an\u00e1lisis<\/h2>\n<p>Cuando se instala un servidor de an\u00e1lisis de c\u00f3digo, es importante diferenciar entre los diferentes espacios seg\u00fan su finalidad:<\/p>\n<ul>\n<li>El espacio dedicado a los diferentes softwares y diferentes versiones de Oracle, Java, Tomcat, SonarQube, etc.<\/li>\n<li>El espacio dedicado a la entrega e instalaci\u00f3n del c\u00f3digo fuente a analizar.<\/li>\n<li>El espacio dedicado al an\u00e1lisis de la implementaci\u00f3n: configuraci\u00f3n, backups, personalizaci\u00f3n, presentaci\u00f3n de informes, extracci\u00f3n de datos, el an\u00e1lisis y su documentaci\u00f3n (muy \u00fatil cuando se multiplican ellos o tu debes volver a hacer un an\u00e1lisis muy antiguo o el servidor de an\u00e1lisis es utilizado por diferentes operadores), etc.<\/li>\n<\/ul>\n<p>SonarQube nos permite especificar este espacio en el archivo &#8216;sonar runner.bat&#8217; con la variable &#8216;HOME PROJECT&#8217;.<\/p>\n<p>Entonces buscamos en este archivo la siguiente l\u00ednea:<\/p>\n<p style=\"padding-left: 30px\"><strong>set PROJECT_HOME= %CD%<\/strong><\/p>\n<p>y vamos a cambiarla\u00a0 para indicar un sub-directorio &#8216;Projects&#8217; en el que vamos a colocar los archivos de configuraci\u00f3n de nuestros an\u00e1lisis. En realidad, yo no pondr\u00eda este espacio en el directorio del SonarQube Runner, es s\u00f3lo para nuestra demostraci\u00f3n.<\/p>\n<p>He modificado el archivo &#8216;sonar runner.bat&#8217; para insertar las tres l\u00edneas siguientes:<\/p>\n<ul>\n<li>\u00a0Ense\u00f1ar el directorio \u2018SONAR RUNNER HOME\u2019 del SonarQube Runner :<\/li>\n<\/ul>\n<p style=\"padding-left: 30px\"><strong>echo \u201dSONAR_RUNNER_HOME = %SONAR_RUNNER_HOME%\u201d<\/strong><\/p>\n<ul>\n<li>Definir el directorio de an\u00e1lisis \u2018PROJECT HOME\u2019 en una carpeta \u2018\\Projects\u2019 que vamos a crear bajo la carpeta anterior, y escribirlo en la pantalla:<\/li>\n<\/ul>\n<p style=\"padding-left: 30px\"><strong>set PROJECT_HOME=%SONAR_RUNNER_HOME%\\Projects<\/strong><br \/>\n<strong> echo \u201dPROJECT_HOME = %PROJECT_HOME%\u201d<\/strong><\/p>\n<h2><span class=\"short_text\" id=\"result_box\" lang=\"es\"><span class=\"hps\">Configuraci\u00f3n de<\/span> <span class=\"hps\">nuestro an\u00e1lisis inicial<\/span><\/span><\/h2>\n<p>Para realizar un an\u00e1lisis, el SonarQube Runner se basa en el archivo &#8216;sonar-project.properties&#8217; localizado en el entorno de an\u00e1lisis: el directorio &#8216;Projects&#8217; que acabamos de crear. Nuestro objetivo es analizar una aplicaci\u00f3n Java &#8216;Extranet&#8217; que se encuentra en &#8216;C:\\SRC\\Demo\\J2EE\\Source\\Extranet\\&#8217;.<br \/>\nSi no tienes c\u00f3digo fuente (o quieres analizar otro tipo de c\u00f3digo), puedes recuperar un ejemplo de c\u00f3digo y su configuraci\u00f3n de an\u00e1lisis en esta p\u00e1gina:\u00a0<a title=\"Page d'exemples Sonar\" href=\"http:\/\/docs.codehaus.org\/display\/SONAR\/Sonar+Project+Examples\" target=\"_blank\">http:\/\/docs.codehaus.org\/display\/SONAR\/Sonar+Project+Examples<\/a>.<\/p>\n<p>Sin entrar en los detalles de los par\u00e1metros para un an\u00e1lisis de c\u00f3digo Java, vamos a crear el fichero \u2018sonar-project.properties\u2019 con los siguientes attributos:<\/p>\n<ul>\n<li>En primer lugar, los datos necesarios: nombre \/ clave de esta aplicaci\u00f3n, y un n\u00famero de versi\u00f3n:<\/li>\n<\/ul>\n<p style=\"padding-left: 30px\"><strong># required metadata<\/strong><br \/>\n<strong> sonar.projectKey=EXT<\/strong><br \/>\n<strong> sonar.projectName=Extranet<\/strong><br \/>\n<strong> sonar.projectVersion=1.0<\/strong><\/p>\n<ul>\n<li>Por supuesto, la ubicaci\u00f3n de los archivos que se analizar\u00e1n:<\/li>\n<\/ul>\n<p style=\"padding-left: 30px\"><strong>sonar.sources=C:\/SRC\/Demo\/J2EE\/Source\/Extranet\/WEB-INF\/src\/<\/strong><\/p>\n<ul>\n<li>Por \u00faltimo: el lenguaje de programaci\u00f3n que decidir\u00e1 del parser SonarQube para analizar esta aplicaci\u00f3n:<\/li>\n<\/ul>\n<p style=\"padding-left: 30px\"><strong>#The value of the property must be the key of the language.<\/strong><br \/>\n<strong> sonar.language=java<\/strong><\/p>\n<h2>Paquetes y clases Java<\/h2>\n<p>Un punto a aclarar si no conoces bien el lenguaje Java. Las clases Java se organizan en paquetes que corresponden a los directorios donde se encuentran los archivos .java para estas clases. La identificaci\u00f3n de este paquete se muestra en la primera l\u00ednea del archivo java.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/PackageDeclare.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-726\" alt=\"D\u00e9claration de package\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/PackageDeclare.jpg\" width=\"332\" height=\"98\" \/><\/a>En este ejemplo, el fichero \u2018J2EEConnection.java\u2019 se encuentra en el directorio &#8216;C:\\SRC\\Demo\\J2EE\\Source\\Extranet\\WEB-INF\\src\\com\\extranet\\common\u2019. El directorio fuente \u2013 tambi\u00e9n llamado \u2018root\u2019 ou directorio raiz \u2013 que indicar en nuestro archivo de configuraci\u00f3n de an\u00e1lisis, es inmediatamente por encima de todos los directorios \/ paquetes.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/PackageOrg.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-727\" alt=\"Organisation des packages\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/PackageOrg.jpg\" width=\"393\" height=\"147\" \/><\/a><\/p>\n<p>Si tienes alguna duda, abre un archivo de la aplicaci\u00f3n Java para ver la primera l\u00ednea. luego, busca el directorio &#8216;padre&#8217; del paquete: es lo que se debe especificar en el archivo de configuraci\u00f3n de an\u00e1lisis SonarQube Runner.<\/p>\n<p>Normalmente, se encuentra en un directorio &#8216;src&#8217;, pero a veces no se respeta esta norma, y los paquetes se organizan en diferentes carpetas. En este caso, se deben especificar todos en el &#8216;sonar project.properties&#8217;, separados por una coma, como en el siguiente ejemplo:<\/p>\n<p style=\"padding-left: 30px\"><strong>sources=..\/src1\/,..\/src2\/<\/strong><\/p>\n<h2>Ejecutar nuestro primer an\u00e1lisis<\/h2>\n<p>En una ventana DOS, ejecutamos el archivo &#8216;sonar-runner.bat&#8217;.<br \/>\nVemos las dos variables que apuntan al directorio del SonarQube Runner y nuestro espacio &#8216;Projects&#8217; con el archivo de configuraci\u00f3n de nuestro an\u00e1lisis:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerExec1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-729\" alt=\"Ex\u00e9cution Sonar Runner\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerExec1.jpg\" width=\"684\" height=\"291\" \/><\/a><\/p>\n<p>Adem\u00e1s, podemos ver el nombre del proyecto y el directorio indicado en el par\u00e1metro &#8216;sonar.sources&#8217;.<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerExec2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-730\" alt=\"SonarRunnerExec2\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerExec2.jpg\" width=\"685\" height=\"253\" \/><\/a><\/p>\n<p>Cuando puedes ver en el log de an\u00e1lisis, el mensaje \u2018ANALYSIS SUCCESFULL\u2019:<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerExecFin.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-731\" alt=\"SonarRunnerExecFin\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerExecFin.jpg\" width=\"685\" height=\"90\" \/><\/a><\/p>\n<p>puedes entrar en el portal SonarQube y ver los resultados de nuestro primer an\u00e1lisis<\/p>\n<p><a href=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerResults.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-732\" alt=\"1\u00e8re analyse avec Sonar Runner\" src=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/04\/SonarRunnerResults.jpg\" width=\"332\" height=\"136\" \/><\/a>Vemos el nombre del proyecto y el n\u00famero de version como definido en el \u2018sonar-project.properties\u2019.<\/p>\n<p>Hemos visto los par\u00e1metros m\u00e1s simples que se necesitan para llevar a cabo un an\u00e1lisis. Hay muchos otros que encontrar\u00e1s en esta p\u00e1gina\u00a0<a title=\"Analyzing with Sonar Runner\" href=\"http:\/\/docs.codehaus.org\/display\/SONAR\/Analyzing+with+Sonar+Runner\" target=\"_blank\">Analyzing with SonarQube Runner<\/a>.<\/p>\n<p>Hemos completado nuestro an\u00e1lisis inicial de la forma m\u00e1s sencilla posible, mediante unos par\u00e1metros necesarios en el archivo &#8216;sonar-project.properties&#8217;, sin la necesidad de gestionar archivos xml de Maven y su sintaxis, a veces compleja.<\/p>\n<p>Sin embargo, proceder as\u00ed tiene un inconveniente: comprobar errores en una ventana DOS no es muy f\u00e1cil, especialmente para largos an\u00e1lisis o encontrando muchos errores.<\/p>\n<p>Por suerte, veremos c\u00f3mo solucionarlo, gracias a nuestro amigo Jenkins.<\/p>\n<p>Art\u00edculo siguiente: c\u00f3mo instalar y configurar Jenkins. A bient\u00f4t.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hemos instalado anteriormente el portal SonarQube\u00a0con Tomcat, y el SonarQube Runner, que nos permitir\u00e1 realizar nuestro primer an\u00e1lisis. En la carpeta de instalaci\u00f3n de SonarQube Runner, tenemos tres directorios: Un directorio &#8216;..\\lib&#8217; con un .jar necesario para la ejecuci\u00f3n del SonarQube-Runner. Un directorio &#8216;..\\conf&#8217; con el archivo\u00a0 sonar runner.properties&#8217; dedicado a configurar la conexi\u00f3n con [&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-449","post","type-post","status-publish","format-standard","hentry","category-sonar-instalacion"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/449"}],"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=449"}],"version-history":[{"count":23,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/449\/revisions"}],"predecessor-version":[{"id":451,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/posts\/449\/revisions\/451"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/media?parent=449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/categories?post=449"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/es\/wp-json\/wp\/v2\/tags?post=449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}