đĄïž SonarQube : l'analyse statique qui garde ton code propre
đ Introduction
La relecture de code attrape beaucoup de choses, mais pas tout. Un bug subtil, une injection SQL oubliĂ©e, une mĂ©thode de 300 lignes que personne nâose toucher, une couverture de tests qui sâeffrite commit aprĂšs commit : Ă lâĂ©chelle dâun projet vivant, ça passe entre les mailles. Lâanalyse statique automatise cette vigilance â elle lit le code sans lâexĂ©cuter et remonte ce qui cloche.
SonarQube, Ă©ditĂ© par la sociĂ©tĂ© Sonar, est la rĂ©fĂ©rence du domaine. Il scanne le code, classe les problĂšmes (bugs, vulnĂ©rabilitĂ©s, code smells), mesure la couverture et la duplication, et surtout : il sait dire « non » quand du nouveau code dĂ©grade la qualitĂ©. On va voir comment le lancer, ce quâest un quality gate, et comment le brancher dans une CI.
đ Sonar, SonarQube, SonarQube Cloud : qui est qui ?
Le nommage a changé fin 2024, autant le clarifier :
- Sonar â lâentreprise Ă©ditrice.
- SonarQube Server â la plateforme auto-hĂ©bergĂ©e (Ă©ditions payantes Developer, Enterprise, Data Center).
- SonarQube Community Build â la version gratuite et open source (LGPL-3.0), auto-hĂ©bergĂ©e, qui sâappelait « Community Edition » jusquâĂ fin 2024. Câest celle du homelab.
- SonarQube Cloud â la version SaaS, anciennement SonarCloud.
- SonarQube for IDE â lâextension dâĂ©diteur, ex-SonarLint, qui remonte les problĂšmes pendant que tu codes.
đ Lancer SonarQube Community Build
Une commande Docker suffit pour un serveur local. Le port par défaut est le 9000 :
docker run -d --name sonarqube -p 9000:9000 sonarqube:communityLâinterface sâouvre sur http://localhost:9000 (identifiants par dĂ©faut admin / admin, Ă changer immĂ©diatement). On crĂ©e ensuite un projet, on gĂ©nĂšre un token, et on lance lâanalyse depuis le dĂ©pĂŽt avec le scanner officiel :
docker run --rm \
-e SONAR_HOST_URL="http://localhost:9000" \
-e SONAR_TOKEN="<ton-token>" \
-v "$(pwd):/usr/src" \
sonarsource/sonar-scanner-cliUn petit fichier sonar-project.properties à la racine décrit le projet :
sonar.projectKey=mon-app
sonar.sources=srcđŻ Le quality gate et le « Clean as You Code »
Câest la fonctionnalitĂ© qui change tout. PlutĂŽt que de te noyer sous des milliers dâavertissements sur du code legacy, SonarQube applique le principe Clean as You Code : il concentre lâexigence sur le code nouveau ou modifiĂ©. Ta dette existante ne disparaĂźt pas, mais elle ne tâempĂȘche pas dâavancer â et le code que tu Ă©cris aujourdâhui, lui, doit ĂȘtre propre.
Le quality gate matĂ©rialise cette exigence : un ensemble de conditions sur le nouveau code (zĂ©ro nouveau bug, zĂ©ro vulnĂ©rabilitĂ©, couverture minimale, duplication maĂźtrisĂ©e). Sâil passe au vert, tu merges. Sâil passe au rouge, quelque chose sâest dĂ©gradĂ©. Les mĂ©triques suivies sont classiques mais complĂštes : bugs, vulnĂ©rabilitĂ©s, security hotspots, code smells, couverture de tests et duplication.
đ§° LâintĂ©grer dans la CI
Tout lâintĂ©rĂȘt est lĂ : lâanalyse tourne Ă chaque push, et le quality gate peut faire Ă©chouer le pipeline. Avec GitLab CI, un job suffit :
sonarqube:
image: sonarsource/sonar-scanner-cli:latest
variables:
SONAR_HOST_URL: '$SONAR_HOST_URL'
SONAR_TOKEN: '$SONAR_TOKEN'
script:
- sonar-scannerLe principe est le mĂȘme avec GitHub Actions. En amont, une bonne suite de tests â Pest cĂŽtĂ© PHP, par exemple â produit le rapport de couverture que SonarQube consomme pour vĂ©rifier que le nouveau code est bien testĂ©.
â ïž Quelques prĂ©cautions
- Ne vise pas le « zĂ©ro problĂšme » sur tout le legacy. Câest dĂ©courageant et sans fin. Le quality gate sur le nouveau code (Clean as You Code) est la bonne stratĂ©gie : la qualitĂ© monte Ă mesure que tu touches le code.
- Les faux positifs existent. Une rĂšgle inadaptĂ©e Ă ton contexte se dĂ©sactive ou sâajuste dans le quality profile, plutĂŽt que de la subir ou dâignorer tous les avertissements.
- La version Community Build a ses limites. Elle nâanalyse pas les branches ni les pull requests sĂ©parĂ©ment â câest rĂ©servĂ© aux Ă©ditions payantes. Pour un projet perso, on scanne la branche principale ; en Ă©quipe, lâanalyse de PR justifie souvent lâĂ©dition Developer ou SonarQube Cloud.
- Ăa consomme des ressources. SonarQube embarque une base de donnĂ©es et un moteur de recherche : prĂ©vois de la RAM sur ton serveur.
đ Conclusion
SonarQube, câest un garde-fou automatique sur la qualitĂ© : il voit ce que la relecture laisse passer, et le quality gate transforme « on devrait nettoyer ça un jour » en une rĂšgle qui bloque la merge aujourdâhui. Commence simple â un docker run, un scan de ta branche principale, le quality gate par dĂ©faut â puis branche-le dans ta CI. Le code que tu Ă©cris Ă partir de maintenant restera propre, sans grand mĂ©nage hĂ©roĂŻque.
đ Liens utiles
/faq
Questions fréquentes
Quelle est la différence entre SonarQube Server et SonarQube Cloud ?
+
SonarQube Server est la version auto-hébergée : tu l'installes sur ta propre infrastructure. SonarQube Cloud (l'ancien SonarCloud) est la version SaaS, hébergée par Sonar. Pour un usage gratuit et auto-hébergé, on utilise SonarQube Community Build, la version open source.
SonarQube est-il gratuit ?
+
Oui, dans sa version SonarQube Community Build : open source (licence LGPL-3.0), auto-hébergée, avec le support de plus de 40 langages. Les éditions payantes (Server Developer/Enterprise, et SonarQube Cloud) ajoutent l'analyse des branches et des pull requests, plus de langages et des rÚgles avancées.
Qu'est-ce qu'un quality gate ?
+
C'est un ensemble de conditions que le nouveau code doit remplir pour ĂȘtre acceptĂ© : pas de nouveau bug, pas de vulnĂ©rabilitĂ©, une couverture de tests suffisante, peu de duplication. Si une condition Ă©choue, le quality gate passe au rouge et peut faire Ă©chouer le pipeline.