Comment assurer la qualité du code avec SonarQube sur Ubuntu 18.04

L'auteur a sélectionnéInternet Archive pour recevoir un don dans le cadre du programmeWrite for DOnations.

introduction

Code quality est une approximation de l'utilité et de la maintenabilité d'un morceau de code spécifique. Le code qualité facilitera la tâche de maintenance et d’extension de votre application. Cela permet de réduire le nombre de bogues introduits lorsque vous apportez les modifications requises ultérieurement.

SonarQube est un outil open source qui aide à l'analyse de la qualité du code et à la création de rapports. Il analyse votre code source à la recherche de bogues, de vulnérabilités et de problèmes de maintenabilité potentiels, puis présente les résultats dans un rapport qui vous permettra d'identifier les problèmes potentiels dans votre application.

L’outil SonarQube lui-même est constitué de deux parties: un scanner, qui est une application qui serait installée localement sur la machine du développeur pour effectuer l’analyse de code, et un serveur centralisé pour la tenue des dossiers et la création de rapports. Une seule instance de serveur SonarQube peut prendre en charge plusieurs scanners, ce qui vous permet de centraliser les rapports sur la qualité du code provenant de nombreux développeurs à un seul endroit.

Dans ce guide, vous allez déployer un serveur SonarQube et un scanner pour analyser votre code et créer des rapports sur la qualité du code. Vous effectuerez ensuite un test sur votre ordinateur en scannant un exemple de code avec le scanner SonarQube.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

[[step-1 -—- preparation-for-the-install]] == Étape 1 - Préparation de l'installation

Vous devez suivre quelques étapes pour préparer l’installation de SonarQube. Étant donné que SonarQube est une application Java qui s’exécutera en tant que service et que vous ne souhaitez pas exécuter de services en tant qu’utilisateurroot, vous allez créer un autre utilisateur système spécialement pour exécuter les services SonarQube. Après cela, vous allez créer le répertoire d’installation et définir ses autorisations, puis vous allez créer une base de données MySQL et un utilisateur pour SonarQube.

Tout d'abord, créez l'utilisateursonarqube:

sudo adduser --system --no-create-home --group --disabled-login sonarqube

Cet utilisateur ne sera utilisé que pour exécuter le service SonarQube, ce qui crée un utilisateur système qui ne peut pas se connecter directement au serveur.

Ensuite, créez le répertoire dans lequel SonarQube sera installé:

sudo mkdir /opt/sonarqube

Les versions de SonarQube sont emballées dans un format compressé, donc installez l'utilitaireunzip qui vous permettra d'extraire ces fichiers.

sudo apt-get install unzip

Vous allez ensuite créer une base de données et les informations d'identification que SonarQube utilisera. Connectez-vous au serveur MySQL en tant qu'utilisateurroot:

sudo mysql -u root -p

Créez ensuite la base de données SonarQube:

CREATE DATABASE sonarqube;

Créez maintenant les informations d'identification que SonarQube utilisera pour accéder à la base de données.

CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password';

Accordez ensuite des autorisations pour que l'utilisateur nouvellement créé puisse modifier la base de données SonarQube:

GRANT ALL ON sonarqube.* to sonarqube@'localhost';

Appliquez ensuite les modifications d'autorisation et quittez la console MySQL:

FLUSH PRIVILEGES;
EXIT;

Maintenant que l'utilisateur et le répertoire sont en place, vous allez télécharger et installer le serveur SonarQube.

[[step-2 -—- téléchargement-et-installation-sonarqube]] == Étape 2 - Téléchargement et installation de SonarQube

Commencez par remplacer le répertoire de travail actuel par le répertoire d'installation SonarQube:

cd /opt/sonarqube

Ensuite, dirigez-vous vers lesSonarQube downloads page et récupérez le lien de téléchargement pour SonarQube 7.5 Community Edition. Plusieurs versions et versions de SonarQube sont disponibles au téléchargement sur la page, mais dans ce didacticiel spécifique, nous utiliserons SonarQube 7.5 Community Edition.

Après avoir obtenu le lien, téléchargez le fichier:

sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip

Décompressez le fichier:

sudo unzip sonarqube-7.5.zip

Une fois les fichiers extraits, supprimez le fichier zip téléchargé, car vous n'en avez plus besoin:

sudo rm sonarqube-7.5.zip

Enfin, mettez à jour les autorisations afin que l'utilisateursonarqube soit propriétaire de ces fichiers, et puisse lire et écrire des fichiers dans ce répertoire:

sudo chown -R sonarqube:sonarqube /opt/sonarqube

Maintenant que tous les fichiers sont en place, nous pouvons passer à la configuration du serveur SonarQube.

[[step-3 -—- configuration-the-sonarqube-server]] == Étape 3 - Configuration du serveur SonarQube

Nous devrons modifier quelques éléments dans le fichier de configuration SonarQube. À savoir:

  • Nous devons spécifier le nom d'utilisateur et le mot de passe que le serveur SonarQube utilisera pour la connexion à la base de données.

  • Nous devons également dire à SonarQube d’utiliser MySQL pour notre base de données back-end.

  • Nous dirons à SonarQube de fonctionner en mode serveur, ce qui améliorera les performances.

  • Nous demanderons également à SonarQube d’écouter uniquement sur l’adresse du réseau local, car nous utiliserons un proxy inverse.

Commencez par ouvrir le fichier de configuration SonarQube:

sudo nano sonarqube-7.5/conf/sonar.properties

Commencez par changer le nom d'utilisateur et le mot de passe que SonarQube utilisera pour accéder à la base de données en utilisant le nom d'utilisateur et le mot de passe que vous avez créés pour MySQL:

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

    ...

    sonar.jdbc.username=sonarqube
    sonar.jdbc.password=some_secure_password

    ...

Ensuite, indiquez à SonarQube d’utiliser MySQL comme pilote de base de données:

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

    ...

    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

    ...

Comme cette instance de SonarQube sera exécutée en tant que serveur dédié, nous pourrions ajouter l'option-server pour activer le mode serveur de SonarQube, ce qui aidera à maximiser les performances.

Nginx gérera la communication entre les clients SonarQube et votre serveur. Vous devrez donc indiquer à SonarQube de n'écouter que l'adresse locale.

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

    ...

    sonar.web.javaAdditionalOpts=-server
    sonar.web.host=127.0.0.1

Une fois que vous avez mis à jour ces valeurs, enregistrez et fermez le fichier.

Ensuite, vous utiliserezSystemd pour configurer SonarQube pour qu'il s'exécute en tant que service afin qu'il démarre automatiquement lors d'un redémarrage.

Créez le fichier de service:

sudo nano /etc/systemd/system/sonarqube.service

Ajoutez le contenu suivant au fichier qui spécifie le mode de démarrage et d'arrêt du service SonarQube:

/etc/systemd/system/sonarqube.service

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking

ExecStart=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh stop

User=sonarqube
Group=sonarqube
Restart=always

[Install]
WantedBy=multi-user.target

Vous pouvez en savoir plus sur les fichiers d'unité systemd dansUnderstanding Systemd Units and Unit Files.

Fermez et enregistrez le fichier, puis démarrez le service SonarQube:

sudo service sonarqube start

Vérifiez l'état du service SonarQube pour vous assurer qu'il a démarré et fonctionne comme prévu:

service sonarqube status

Si le service a démarré avec succès, vous verrez une ligne indiquant «Actif» semblable à ceci:

● sonarqube.service - SonarQube service
   Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset
   Active: active (running) since Sat 2019-01-05 19:00:00 UTC; 2s ago

Ensuite, configurez le service SonarQube pour qu'il démarre automatiquement au démarrage:

sudo systemctl enable sonarqube

À ce stade, le serveur SonarQube prend quelques minutes pour s’initialiser complètement. Vous pouvez vérifier si le serveur a démarré en interrogeant le port HTTP:

curl http://127.0.0.1:9000

Une fois le processus d'initialisation terminé, vous pouvez passer à l'étape suivante.

[[step-4 -—- configuration-the-reverse-proxy]] == Étape 4 - Configuration du reverse proxy

Maintenant que le serveur SonarQube est en cours d’exécution, il est temps de configurer Nginx, qui sera le terminateur de proxy inverse et HTTPS de notre instance SonarQube.

Commencez par créer un nouveau fichier de configuration Nginx pour le site:

sudo nano /etc/nginx/sites-enabled/sonarqube

Ajoutez cette configuration pour que Nginx achemine le trafic entrant vers SonarQube:

/etc/nginx/sites-enabled/sonarqube

server {
    listen 80;
    server_name sonarqube.example.com;

    location / {
        proxy_pass http://127.0.0.1:9000;
    }
}

Enregistrez et fermez le fichier.

Ensuite, assurez-vous que votre fichier de configuration n'a pas d'erreur de syntaxe:

sudo nginx -t

Si vous voyez des erreurs, corrigez-les et exécutez à nouveausudo nginx -t. Une fois qu'il n'y a plus d'erreur, redémarrez Nginx:

sudo service nginx restart

Pour un test rapide, vous pouvez maintenant visiterhttp://sonarqube.example.com dans votre navigateur Web. L’interface Web SonarQube vous accueillera.

Nous allons maintenant utiliser Let’s Encrypt pour créer des certificats HTTPS pour notre installation, afin que les données soient transférées de manière sécurisée entre le serveur et votre ordinateur local. Utilisezcertbot pour créer le certificat pour Nginx:

sudo certbot --nginx -d sonarqube.example.com

S'il s'agit de votre première demande d'un certificat Let’s Encrypt, Certbot vous demandera votre adresse e-mail et votre contrat de licence CLUF. Entrez votre email et acceptez le CLUF.

Certbot vous demandera ensuite comment vous souhaitez configurer vos paramètres de sécurité. Sélectionnez l'option pour rediriger toutes les demandes vers HTTPS. Cela garantira que toutes les communications entre les clients et le serveur SonarQube sont cryptées.

Maintenant que la configuration du proxy inverse est terminée, nous pouvons passer à la sécurisation de notre serveur SonarQube.

[[step-5 -—- securing-sonarqube]] == Étape 5 - Sécurisation de SonarQube

SonarQube est livré avec un nom d'utilisateur et un mot de passe administrateur par défaut deadmin. Ce mot de passe par défaut n’est pas sécurisé. Par conséquent, vous voudrez le mettre à jour pour qu’il soit plus sûr, comme pratique de sécurité efficace.

Commencez par visiter l'URL de votre installation et connectez-vous à l'aide des informations d'identification par défaut. Si vous êtes invité à démarrer un didacticiel, cliquez simplement surSkip this tutorial pour accéder au tableau de bord.

Une fois connecté, cliquez sur l'ongletAdministration, sélectionnezSecurity dans la liste déroulante, puis sélectionnezUsers:

SonarQube users administration tab

À partir de là, cliquez sur le petit rouage situé à droite de la ligne du compte «Administrateur», puis sur «Changer le mot de passe». Assurez-vous de changer le mot de passe pour quelque chose de facile à retenir, mais difficile à deviner.

Créez maintenant un utilisateur normal que vous pouvez utiliser pour créer des projets et soumettre des résultats d'analyse à votre serveur à partir de la même page. Cliquez sur le boutonCreate User en haut à droite de la page:
SonarQube new user dialog

Créez ensuite un jeton pour un utilisateur spécifique en cliquant sur le bouton dans la colonne «Jetons» et en lui attribuant un nom. Vous aurez besoin de ce jeton ultérieurement lorsque vous appelez l'analyseur de code. Veillez donc à le noter dans un endroit sûr.

Enfin, vous remarquerez peut-être que l'instance SonarQube est largement ouverte sur le monde et que tout le monde peut voir les résultats de l'analyse et votre code source. Ce paramètre est hautement non sécurisé. Nous allons donc configurer SonarQube pour autoriser uniquement les utilisateurs connectés à accéder au tableau de bord. Dans le même ongletAdministration, cliquez surConfiguration, puis surGeneral Settings, puis surSecurity dans le volet gauche. Retournez le commutateur indiquantForce user authentication pour activer l'authentification, puis cliquez sur le boutonSave sous le commutateur.

SonarQube Force authentication switch

Maintenant que vous avez terminé la configuration du serveur, configurons le scanner SonarQube.

[[step-6 -—- setting-up-the-code-scanner]] == Étape 6 - Configuration du lecteur de code

Le scanner de code de SonarQube est un package séparé que vous pouvez installer sur un ordinateur différent de celui qui exécute le serveur SonarQube, tel que votre station de travail de développement local ou un serveur à distribution continue. Il existe des packages disponibles pour Windows, MacOS et Linux que vous pouvez trouver à l'adresseSonarQube web site

Dans ce didacticiel, vous installerez l’analyseur de code sur le même serveur que notre serveur SonarQube.

Commencez par créer un répertoire pour le scanner:

sudo mkdir /opt/sonarscanner

Puis changez dans ce répertoire:

cd /opt/sonarscanner

Téléchargez le scanner SonarQube pour Linux en utilisantwget:

sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip

Ensuite, extrayez le scanner:

sudo unzip sonar-scanner-cli-3.2.0.1227-linux.zip

Puis supprimez le fichier archive zip:

sudo rm sonar-scanner-cli-3.2.0.1227-linux.zip

Après cela, vous devrez modifier quelques paramètres pour que le scanner fonctionne avec votre serveur. Ouvrez le fichier de configuration pour le modifier:

sudo nano sonar-scanner-3.2.0.1227-linux/conf/sonar-scanner.properties

Commencez par indiquer au scanner où il doit soumettre les résultats de l'analyse du code. Supprimez le commentaire de la ligne commençant parsonar.host.url et définissez-la sur l'URL de votre serveur SonarQube:

/opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/conf/sonar.properties

    sonar.host.url=https://sonarqube.example.com

Enregistrez et fermez le fichier. Maintenant, exécutez le binaire du scanner:

sudo chmod +x sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner

Créez ensuite un lien symbolique pour pouvoir appeler le scanner sans spécifier le chemin:

sudo ln -s /opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner

Maintenant que le scanner est configuré, nous sommes prêts à exécuter notre première analyse de code.

[[step-7 -—- running-a-test-scan-on-sonarqube-example-projects]] == Étape 7 - Exécution d'une analyse de test sur des projets d'exemple SonarQube

Si vous souhaitez simplement fouiller avec SonarQube pour voir ce qu'il peut faire, vous pouvez envisager d'exécuter une analyse de test sur lesSonarQube example projects. Ce sont des exemples de projets créés par l'équipe SonarQube et contenant de nombreux problèmes que SonarQube détectera et rapportera ensuite.

Créez un nouveau répertoire de travail dans votre répertoire personnel, puis accédez au répertoire suivant:

cd ~
mkdir sonar-test && cd sonar-test

Téléchargez l'exemple de projet:

wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip

Décompressez le projet et supprimez le fichier archive:

unzip master.zip
rm master.zip

Ensuite, passez au répertoire de projet exemple:

cd sonar-scanning-examples-master/sonarqube-scanner

Exécutez le scanner en lui transmettant le jeton que vous avez créé précédemment:

sonar-scanner -D sonar.login=your_token_here

Cela va prendre du temps. Une fois l’analyse terminée, vous verrez quelque chose comme ceci sur la console:

INFO: Task total time: 14.128 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 21.776s
INFO: Final Memory: 17M/130M
INFO: ------------------------------------------------------------------------

L’exemple de rapport de projet figurera désormais sur le tableau de bord SonarQube, comme suit:

SonarQube Dashboard

Maintenant que vous avez vérifié que le serveur et le scanner SonarQube fonctionnent avec le code de test, vous pouvez utiliser SonarQube pour analyser votre propre code.

[[step-8 -—- running-a-scan-on-your-own-code]] == Étape 8 - Exécution d'un scan sur votre propre code

Pour que SonarQube analyse votre propre code, commencez par transférer votre projet sur le serveur ou suivez l'étape 6 pour installer et configurer le scanner SonarQube sur votre poste de travail et le configurer pour qu'il pointe vers votre serveur SonarQube.

Ensuite, dans le répertoire racine de votre projet, créez un fichier de configuration SonarQube:

nano sonar-project.properties

Vous utiliserez ce fichier pour expliquer à SonarQube votre projet.

Tout d'abord, définissez unproject key, qui est un ID unique pour le projet. Vous pouvez utiliser ce que vous voulez, mais cet identifiant doit être unique pour votre instance SonarQube:

sonar-project.properties

    # Unique ID for this project
    sonar.projectKey=foobar:hello-world

    ...

Ensuite, spécifiez le nom du projet et la version afin que SonarQube affiche ces informations dans le tableau de bord:

sonar-project.properties

    ...

    sonar.projectName=Hello World Project
    sonar.projectVersion=1.0

    ...

Enfin, indiquez à SonarQube où rechercher les fichiers de code. Notez que cela est relatif au répertoire dans lequel réside le fichier de configuration. Définissez-le dans le répertoire actuel:

sonar-project.properties

    # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
    sonar.sources=.

Fermez et enregistrez le fichier.

Vous êtes prêt à exécuter une analyse de la qualité du code sur votre propre code. Exécutez à nouveausonar-scanner en lui passant votre jeton:

sonar-scanner -D sonar.login=your_token_here

Une fois l’analyse terminée, un écran de synthèse semblable à celui-ci apparaît:

INFO: Task total time: 5.417 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 9.659s
INFO: Final Memory: 39M/112M
INFO: ------------------------------------------------------------------------

Le rapport sur la qualité du code du projet figurera désormais sur le tableau de bord SonarQube.

Conclusion

Dans ce didacticiel, vous avez configuré un serveur SonarQube et un scanner pour l’analyse de la qualité du code. Vous pouvez maintenant vous assurer que votre code est facilement maintenable en exécutant simplement une analyse - SonarQube vous dira où les problèmes potentiels pourraient être!

À partir de là, vous voudrez peut-être lire lesSonarQube Scanner documentation pour apprendre à exécuter une analyse sur votre machine de développement locale ou dans le cadre de votre processus de construction.