{"id":1125,"date":"2013-09-14T15:36:50","date_gmt":"2013-09-14T14:36:50","guid":{"rendered":"http:\/\/qualilogy.com\/fr\/?p=1125"},"modified":"2013-09-18T19:25:51","modified_gmt":"2013-09-18T18:25:51","slug":"sonarqube-windows-jenkins-tomcat","status":"publish","type":"post","link":"http:\/\/qualilogy.com\/fr\/sonarqube-windows-jenkins-tomcat\/","title":{"rendered":"SonarQube en service Windows avec Jenkins sous 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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQube2.jpg 233w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQube2-199x300.jpg 199w\" sizes=\"(max-width: 233px) 100vw, 233px\" \/><\/a> Nous avons vu lors de notre dernier post comment <a href=\"http:\/\/qualilogy.com\/fr\/migrer-sonarqube-tomcat-service-windows\/\" target=\"_blank\">migrer SonarQube<\/a>\u00a0en tant que service Windows.\u00a0Nous avons en fait effectu\u00e9 une nouvelle installation, sans perdre notre repository, constitu\u00e9 avec notre version de SonarQube sous Tomcat. Nous avons pu v\u00e9rifier que nos projets, les r\u00e9sultats d&rsquo;analyses pr\u00e9c\u00e9dents, mais \u00e9galement toute la configuration existante (plugins, Quality Profiles, etc.) \u00e9taient bien pr\u00e9sents.<\/p>\n<p>Bien. Mais qu&rsquo;en est-il de Jenkins ? Notre Jenkins sous Tomcat travaillait avec la version Tomcat de SonarQube. Nous devons maintenant lui indiquer de travailler avec notre service Windows de SonarQube.<\/p>\n<p>Comment proc\u00e9der ? Voici les \u00e9tapes que j&rsquo;ai suivies.\u00a0<!--more--><\/p>\n<p>&nbsp;<\/p>\n<h2>D\u00e9sinstaller SonarQube sous Tomcat<\/h2>\n<p>La premi\u00e8re \u00e9tape a consist\u00e9 \u00e0 supprimer la webapps SonarQube sous Tomcat. Pour cela, j&rsquo;ai tout simplement :<\/p>\n<ol>\n<li>Ouvert le r\u00e9pertoire de localisation de cette derni\u00e8re\u00a0\u2013\u00a0<strong>C:\\Program Files (x86)\\Apache Software Foundation\\Tomcat 7.0\\webapps<\/strong>\u00a0\u2013\u00a0sur mon portable.<\/li>\n<li>\u00a0Supprimer le fichier &lsquo;Sonar.war&rsquo; et le sous-r\u00e9pertoire &lsquo;Sonar&rsquo; dans ce dossier.<\/li>\n<\/ol>\n<p>Evidemment, vous aurez pris soin de stopper le service Windows de Tomcat au pr\u00e9alable.<\/p>\n<h2>Lancer une analyse avec Jenkins sous Tomcat<\/h2>\n<p>Nous allons maintenant tenter une analyse avec Jenkins. Cette \u00e9tape n&rsquo;est pas obligatoire, et je dirais m\u00eame n&rsquo;a pas de sens : notre installation actuelle de Jenkins ne conna\u00eet que la version Tomcat de SonarQube, que nous venons justement de supprimer.<\/p>\n<p>Mais comme nous l&rsquo;avons vu dans notre\u00a0<a href=\"http:\/\/qualilogy.com\/fr\/migrer-sonarqube-tomcat-service-windows\/\" target=\"_blank\">post pr\u00e9c\u00e9dent<\/a>, SonarQube s&rsquo;appuie compl\u00e8tement sur son propre repository, c&rsquo;est-\u00e0-dire son propre sch\u00e9ma de base de donn\u00e9es, et notre Jenkins actuel sait comment alimenter celui-ci.<\/p>\n<p>Je vais donc :<\/p>\n<p><a style=\"line-height: 1.714285714;font-size: 1rem\" 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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/StartTomcat.jpg 308w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/StartTomcat-300x65.jpg 300w\" sizes=\"(max-width: 308px) 100vw, 308px\" \/><\/a><\/p>\n<ul>\n<li><span style=\"font-size: 1rem;line-height: 1.714285714\">D\u00e9marrer le service Windows Tomcat.<\/span><\/li>\n<li><span style=\"font-size: 1rem;line-height: 1.714285714\">Lancer une analyse existante sous Jenkins, en prenant au pr\u00e9alable le soin de modifier la version de projet pour cette analyse.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\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> Pour cela, cliquez simplement sur le menu d\u00e9roulant qui appara\u00eet \u00e0 droite du lien \/ du nom de projet, et dans ce menu, s\u00e9lectionnez &lsquo;Configure&rsquo;.<\/p>\n<p>J&rsquo;ai choisi ici une application (en fait diff\u00e9rentes applications) de code ABAP (SAP), et dans le fen\u00eatre suivante, de configuration de mon analyse sous Jenkins, je vais modifier la version de projet afin d&rsquo;incr\u00e9menter celle-ci en version 2.0.<\/p>\n<p>N&rsquo;oubliez pas de sauvegarder ce nouveau param\u00e8tre avant de lancer \u00e0 nouveau cette analyse.<\/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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarProjectPropVersion.jpg 580w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarProjectPropVersion-300x39.jpg 300w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>Celle-ci ex\u00e9cut\u00e9e montre bien la version 2.0, depuis le portail de SonarQube en service 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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarAbapV2.jpg 551w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarAbapV2-300x27.jpg 300w\" sizes=\"(max-width: 551px) 100vw, 551px\" \/><\/a><\/p>\n<p>&#8230; alors m\u00eame que Jenkins pointe toujours sur la version 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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarJenkinsV2.jpg 474w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarJenkinsV2-300x45.jpg 300w\" sizes=\"(max-width: 474px) 100vw, 474px\" \/><\/a><\/p>\n<p>Encore une fois, rien d&rsquo;anormal \u00e0 cela, puisque les r\u00e9sultats d&rsquo;analyse sont toujours sauvegard\u00e9es dans le repository de SonarQube, le sch\u00e9ma &lsquo;Sonar&rsquo; en base de donn\u00e9es (Oracle dans mon cas).<\/p>\n<h2>Configurer Jenkins avec le nouveau SonarQube en service 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>Dans la fen\u00eatre de gestion de la configuration Jenkins (&lsquo;Manage Jenkins&rsquo;), nous choisissons le menu &lsquo;Configure System&rsquo;.<\/p>\n<p>Dans la fen\u00eatre suivante, nous allons rechercher la partie consacr\u00e9e \u00e0 la configuration de Sonar dans Jenkins, et activer le bouton &lsquo;Advanced&#8230;&rsquo;.<\/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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarConfig.jpg 550w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarConfig-300x86.jpg 300w\" sizes=\"(max-width: 550px) 100vw, 550px\" \/><\/a>Et dans la page de configuration de SonarQube, indiquer l&rsquo;url du tableau de bord (celle-ci a chang\u00e9 suite \u00e0\u00a0<a href=\"http:\/\/qualilogy.com\/fr\/migrer-sonarqube-tomcat-service-windows\/\" target=\"_blank\">l&rsquo;installation de SonarQube en service 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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarUrl.jpg 496w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/JenkinsSonarUrl-300x65.jpg 300w\" sizes=\"(max-width: 496px) 100vw, 496px\" \/><\/a><\/p>\n<p><strong>Remarque importante<\/strong> : vous pouvez constater que j&rsquo;ai indiqu\u00e9 la nouvelle url de SonarQube sans le slash (ou barre oblique) final. Cela fonctionnera sans probl\u00e8me mais je vous sugg\u00e8re de normaliser cette adresse url en ajoutant ce slash \u00e0 la fin.<\/p>\n<p>N&rsquo;oubliez pas de sauvegarder ce changement de param\u00e8tre avec le bouton &lsquo;Save&rsquo; en fin de page.<\/p>\n<p>Jenkins s&rsquo;appuie sur le SonarQube Runner pour fonctionner. Nous avons vu l&rsquo;installation de ce dernier dans ce post &lsquo;<a href=\"http:\/\/qualilogy.com\/fr\/installer-sonarqube-sonarqube-runner\/\" target=\"_blank\">Installer SonarQube &#8211; SonarQube Runner<\/a>&lsquo;. A cette occasion, nous avons configur\u00e9 le SonarQube Runner avec tous les param\u00e8tres n\u00e9cessaires \u00e0 son bon fonctionnement, indiqu\u00e9s dans le fichier \u2018sonar-runner.properties\u2019.<\/p>\n<p>Dans ce fichier, nous allons indiquer mainteant la nouvelle url du portail SonarQube, tel que pr\u00e9c\u00e9demment sous 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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrlOk.jpg 377w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrlOk-300x47.jpg 300w\" sizes=\"(max-width: 377px) 100vw, 377px\" \/><\/a><\/p>\n<p>Notez bien \u00e0 nouveau la pr\u00e9sence du slash en fin d&rsquo;url.<\/p>\n<p>Lancez \u00e0 nouveau l&rsquo;analyse : le log d&rsquo;analyse sous Jenkins (ou &lsquo;Console Output&rsquo;) doit vous indiquer le message suivant :<\/p>\n<pre><strong>ANALYSIS SUCCESSFUL, you can browse <span style=\"line-height: 1.714285714;font-size: 1rem\">http:\/\/localhost:9000<\/span><\/strong><\/pre>\n<p>Remarque : en d\u00e9but de log d&rsquo;analyse, le &lsquo;server&rsquo; SonarQube comporte bien un slash \u00e0 la fin de l&rsquo;url mais ce message final appara\u00eet toujours sans celui-ci.<\/p>\n<p>En cliquant sur ce lien, vous devez acc\u00e9der au portail SonarQube et voir le r\u00e9sultat de votre analyse. Evidemment, n&rsquo;oubliez pas de lancer le service Windows correspondant auparavant.<\/p>\n<h2>Erreurs possibles<\/h2>\n<p>J&rsquo;ai exp\u00e9riment\u00e9 diff\u00e9rentes combinaisons d&rsquo;installation de SonarQube et Jenkins, sous Tomcat ou en service(s) Windows, et diff\u00e9rentes configurations. J&rsquo;ai rencontr\u00e9 certaines erreurs, et je vais en lister deux ici, qui \u00e0 mon avis se rencontrerons assez fr\u00e9quemment.\u00a0Et vous allez comprendre pourquoi j&rsquo;insiste sur la normalisation du slash \u00e0 la fin de l&rsquo;url du portail SonarQube.<\/p>\n<p>Si vous rencontrez le message d&rsquo;erreur suivant :<\/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>V\u00e9rifiez que vous avez indiqu\u00e9 exactement la m\u00eame url dans la configuration de SonarQube sous Jenkins et dans le fichier &lsquo;sonar-runner.properties&rsquo; du SonarQube Runner.<\/p>\n<p>Si vous rencontrez le message d&rsquo;erreur suivant :<\/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>Commencez d&rsquo;abord par v\u00e9rifier que <strong>vous avez bien d\u00e9marr\u00e9 le service Windows de SonarQube<\/strong>. Je pense que cette erreur sera la plus fr\u00e9quente (en tout cas dans mon exp\u00e9rience d&rsquo;\u00e9tourdi chronique).<\/p>\n<p>V\u00e9rifiez \u00e0 nouveau les urls et plus particuli\u00e8rement la pr\u00e9sence du backslash \u00e0 la fin de celle-ci dans le fichier &lsquo;sonar-runner.properties&rsquo; de configuration du SonarQube Runner.<\/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\" srcset=\"http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrl.jpg 395w, http:\/\/qualilogy.com\/fr\/wp-content\/uploads\/sites\/2\/2013\/09\/SonarQubeSonarUrl-300x92.jpg 300w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/a><\/p>\n<p>Celui-ci n&rsquo;accepte pas de travailler avec une url sans le slash final. Mais de toutes fa\u00e7ons, si vous avez suivi la proc\u00e9dure indiqu\u00e9e dans ce post et que vous rencontrez un message d&rsquo;erreur, commencez par v\u00e9rifier cette url \u00e0 la fois sous Jenkins et sous SonarQube Runner. J&rsquo;ai \u00e9galement rencontr\u00e9 ce cas et il peut s&rsquo;av\u00e9rer ardu ou long \u00e0 investiguer avant de penser \u00e0 rajouter cette barre oblique finale.<\/p>\n<p>Le prochain post sera consacr\u00e9 \u00e0 l&rsquo;installation de Jenkins en service Windows. Et finalement nous d\u00e9barrasser de ce bon vieux Tomcat.<\/p>\n<p>A la semaine prochaine.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous avons vu lors de notre dernier post comment migrer SonarQube\u00a0en tant que service Windows.\u00a0Nous avons en fait effectu\u00e9 une nouvelle installation, sans perdre notre repository, constitu\u00e9 avec notre version de SonarQube sous Tomcat. Nous avons pu v\u00e9rifier que nos projets, les r\u00e9sultats d&rsquo;analyses pr\u00e9c\u00e9dents, mais \u00e9galement toute la configuration existante (plugins, Quality Profiles, etc.) [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1125","post","type-post","status-publish","format-standard","hentry","category-sonar-installation"],"_links":{"self":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1125"}],"collection":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/comments?post=1125"}],"version-history":[{"count":30,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1125\/revisions"}],"predecessor-version":[{"id":1169,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/posts\/1125\/revisions\/1169"}],"wp:attachment":[{"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/media?parent=1125"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/categories?post=1125"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/qualilogy.com\/fr\/wp-json\/wp\/v2\/tags?post=1125"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}