GitLab-CI SonarQube avec un certificat auto-signé

sonarqube 13/02/2021

Lorsque le serveur SonarQube est déployé avec un certificat auto-signé, le sonar-scanner doit faire confiance à l'autorité de certification racine afin de pouvoir s'y connecter, sinon une erreur sera renvoyée. Pour se faire on utilisera l'option javax.net.ssl.trustStore qui va utiliser un magasin de confiance qu'on aura créé avec l'outil keytool de Java.

La solution serait de faire une image personnalisée avec le magasin de confiance intégré mais c'est pas une bonne pratique et c'est difficile à maintenir sur la durée. Donc voici une solution que j'ai mis en place, qui demande peu d'intégration et surtout qui est très facile à maintenir.

Pour commencer, récupérez l'autorité de certification racine et encodez-la en base64 comme ceci :

cat root-ca.crt | base64

Le résultat devra être intégré dans une variable dans votre projet GitLab (et qui sera nativement disponible dans votre CI). Dans cet exemple j'ai nommé la variable SONARQUBE_ROOTCA.

Ensuite dans le job qui va effectuer le scan, ajoutez une nouvelle étape de préparation (before_script) ainsi qu'une variable afin de définir la bonne option pour le sonar-scanner, voici un exemple :

sonar-scanner:
  stage: scan
  image: sonarsource/sonar-scanner-cli:4.5
  variables:
    - SONAR_SCANNER_OPTS: -Djavax.net.ssl.trustStore=/tmp/sonarqube-keystore.jks -Djavax.net.ssl.trustStorePassword=gitlabci
  before_script:
    - echo $SONAR_ROOTCA | base64 -d | keytool -import -noprompt -trustcacerts -alias sonarqube -storepass gitlabci -keystore /tmp/sonarqube-keystore.jks
    - mkdir .scannerwork && chown 1000:1000 .scannerwork
  script:
    - sonar-scanner

La seconde commande (mkdir/chown) présente dans le before_script est pour limiter les problèmes de droits si jamais les fichiers de votre projet ont des droits root par exemple. L'image sonar-scanner tournant avec l'ID 1000, il lui sera impossible de créer son dossier, d'où ce petit "fix".

Bien évidemment si vous utilisez sonar-scanner sans les options/arguments (sauf pour la variable SONAR_SCANNER_OPTS que vous venez de rajouter), il va prendre en compte la configuration que vous aurez spécifiez dans le fichier sonar-project.properties à la racine de votre projet (ou sinon il faut l'exécuter au bon endroit).

Une solution facile, rapide et simple à maintenir pour vos projets !

Tags

🌱 DJΞRFY 🚀

👨🏻‍💻 Tech Lead SRE. Like #Linux, #Apple, #Kubernetes, #Docker, #Unraid, #Traefik, #Hacking, #Chia. Member of @OpenChia Team 🌱 ¯\_(ツ)_/¯