SonarQube Scanner

= Auteur = CHANET Zoran

= Introduction = Cette page explique rapidement le fonctionnement des scanners SonarQube, et en explique la configuration afin qu'il analyse un projet au sein d'un pipeline d'intégration continue GitLab CI/CD et envoie les données récoltées à SonarCloud. Il est également possible d'installer un server SonarQube et de configurer le scanner pour qu'il envoie les informations sur ce server. Pour l'installation d'un tel serveur, voir SonarQube.

= Scanner = Le scanner est celui qui nous permettra de parcourir les fichiers et de relever les erreurs. Il doit être installé sur la machine qui l’utilise. Dans le cas de l'intégration continue GitLab CI/CD, il doit donc être installé sur le runner qui exécute le job correspondant. Afin d’éviter de devoir contrôler précisément quels runners sont utilisés pour le job, et de devoir synchroniser les installations sur tous les runners du projet, il est possible de télécharger et installer le scanner au début du script dans le fichier  qui définit le pipeline.

= Serveur = Le scanner se contente d’analyser le code. Pour obtenir le bel affichage auquel nous a habitué SonarQube, le résultat de cette analyse doit être envoyé à un serveur. Dans le cas de l'intégration continue GitLab CI/CD, puisque le scan tourne sur le runner, il faut que le serveur soit actif et exposé (si le serveur sonar était installé sur le runner et lancé en local avant le scan, il serait détruit à l’arrêt du runner). Il est possible d'utiliser SonarCloud, un serveur sonar public et gratuit pour les projets opensource. Il faut alors configurer le projet scanné pour que l’analyse soit envoyée à SonarCloud, en renseignant le bon projet, la bonne compagnie et le bon token d’authentification (il faut que l’utilisateur ait le droit de lancer une analyse).

= Configuration = Afin que le runner nouvellement installé bénéficie simplement de la configuration décidée en amont, cette configuration est faite pour le projet, dans le fichier  dans le dossier racine du projet. Ce fichier spécifie la configuration utilisée par le scanner pour l’analyse du projet. Comme expliqué dans la page dédiée à GitLab CI/CD, le fichier  définit le comportement du pipeline. Ici, il nous est donc utile à télécharger, installer et utiliser le scanner. Le fichier  définit les variables de configuration utilisées par le scanner. Il est également possible de configurer le scanner en ligne de commande, en ajoutant les options sous la forme  lors de l'appel au scanner.

.gitlab-ci.yml
/!\ Ce fichier est un, l’identation (avec des espaces et non des tabulations) est importante. Le script sonar-analysis télécharge d'abord une archive de scanner (ici, la version '3.3.0.1492'), puis l'extrait (au cas où le scanner ne puisse utiliser unzip, un fichier python est défini pour extraire l'archive). Après avoir donné au runner les droits d'exécution du scanner, l'analyse est lancée. stages: - test sonar-analysis: stage: test script: - wget "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip" - echo "import zipfile" > unzip.py    - echo "" >> unzip.py     - echo "with zipfile.ZipFile('sonar-scanner-cli-3.3.0.1492-linux.zip', \"r\") as z:" >> unzip.py     - echo "  z.extractall(\".\")" >> unzip.py     - python unzip.py     - rm unzip.py     - rm sonar-scanner-cli-3.3.0.1492-linux.zip - chmod -R +x sonar-scanner-3.3.0.1492-linux/ - sonar-scanner-3.3.0.1492-linux/bin/sonar-scanner

sonar-project.properties
sonar.host.url=https://sonarcloud.io sonar.projectKey= sonar.organization= sonar.login= sonar.projectVersion=1.0 sonar.sources=. sonar.exclusions=sonar-scanner-3.3.0.1492-linux/**, sonar.c.file.suffixes=- sonar.cpp.file.suffixes=- sonar.objc.file.suffixes=- sonar.sourceEncoding=UTF-8
 * 1) sonarqube server
 * 1) Required metadata
 * 2) must be unique in a given SonarQube instance
 * 1) Optional metadata
 * 2) Default: master
 * 3) sonar.branch.name=
 * 1) Comma-separated paths to directories with sources (required)
 * 2) Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
 * 3) This property is optional if sonar.modules is set.
 * 1) Language
 * 2) sonar.language=javascript
 * 1) Encoding of the source code. Default is default system encoding

= Sources = https://docs.sonarqube.org/latest/setup/get-started-2-minutes/ https://docs.sonarqube.org/latest/analysis/analysis-parameters/ https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/