Dans cet article, nous allons voir comment déployer SonarQube sur Clever Cloud en deux temps. Le premier consistera en un déploiement très simple, qui est équivalent à une installation locale. Dans un second temps, nous utiliserons une base de données PostgreSQL externalisée pour assurer la persistance des données.
Cet article suppose que vous avez déjà un compte actif sur Clever Cloud, et que votre CLI est installé et configuré. L’installation du CLI est décrite dans la documentation de Clever Cloud.
Le déploiement simple
La documentation SonarQube propose de déployer une instance locale en utilisant la commande suivante :
$ docker container run -d \ --name sonarqube \ -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true \ -p 9000:9000 \ sonarqube:latest
SonarQube fournit une image Docker prête à l’emploi que nous allons utiliser. Nous utiliserons le tag Docker 10-community
pour nous assurer de rester sur la version majeure 10
.
La variable d’environnement SONAR_ES_BOOTSTRAP_CHECKS_DISABLE
permet à SonarQube d’ignorer les contrôles de démarrage du processus Elasticsearch embarqué dans son serveur.
SonarQube écoute par défaut sur le port 9000
.
Ces informations nous seront utiles par la suite !
Création de l’application dans Clever Cloud
Nous allons tout d’abord créer un repository Git qui hébergera notre code (et nos scripts si besoin), et qui sera utilisé par le CLI clever
pour nos déploiements.
$ git init
Créer une application dans Clever Cloud consiste en une ligne de commande :
$ clever create \ --type docker \ sonarqube-app Your application has been successfully created!
Si vous déployez votre code dans une organisation, ajoutez le paramètre --org
à votre ligne de commande :
$ clever create \ --type docker \ --org orga_a4fdf186-bcaa-4d9f-9249-b09d57bf4beb \ sonarqube-app Your application has been successfully created!
L’application ainsi créée apparaît dans la console Clever Cloud :
La commande clever create
génère un fichier .clever.json
dans notre répertoire courant qui contient les informations de notre application, en particulier son identifiant.
{ "apps": [ { "app_id": "app_765c79a9-e316-460b-a75a-054738784efd", "org_id": "orga_a4fdf186-bcaa-4d9f-9249-b09d57bf4beb", "deploy_url": "https://push-n3-par-clevercloud-customers.services.clever-cloud.com/app_765c79a9-e316-460b-a75a-054738784efd.git", "name": "sonarqube-app", "alias": "sonarqube-app" } ] }
Ce fichier peut être archivé dans repository Git :
git add .clever.json && git commit -m "👷 : add .clever.json"
Dimensionnement de l’instance
SonarQube a besoin d’au moins 2 Go de RAM pour fonctionner ainsi que 1 Go de RAM disponible sur l’OS, nous allons donc utiliser une instance M
qui disposera de 4 Go de RAM au total.
La modification du type d’instance se fait également en une ligne de commande :
$ clever scale --flavor M App rescaled successfuly
Une fois la commande exécutée, la modification est visible dans l’onglet Scalability de l’application :
Configuration des variables d’environnement
Clever Cloud requiert que les applications déployées écoutent sur le port 8080
.
Nous avons également vu précédemment que par défaut SonarQube écoute sur le port 9000
.
La configuration de notre instance SonarQube peut se faire avec des variables d’environnement (doc).
Nous allons donc configurer la variable d’environnement SONAR_WEB_PORT
avec la valeur 8080
. Nous allons également en profiter pour configurer la variable SONAR_ES_BOOTSTRAP_CHECKS_DISABLE
qui était précisée dans la ligne de lancement docker
issue de la documentation SonarQube. Pour configurer ces variables, nous utilisons la commande clever env set
:
$ clever env set SONAR_WEB_PORT 8080 Your environment variable has been successfully saved $ clever env set SONAR_ES_BOOTSTRAP_CHECKS_DISABLE true Your environment variable has been successfully saved
Les variables d’environnement configurées sont visibles sur la console Clever Cloud, dans l’onglet Environment Variables :
Déploiement de l’image Docker
Une fois notre application créée et configurée, il nous faut la déployer.
Nous créons un simple Dockerfile
dans notre repository :
FROM sonarqube:10-community
Puis nous déployons l’application en créant un commit, et en faisant un clever deploy
:
$ git add Dockerfile && git commit -m "🐋 : init Dockerfile" $ clever deploy App is brand new, no commits on remote yet New local commit to push is 371a4224151b9e9bb8888a403a9626c88a0b1312 (from refs/heads/main) Pushing source code to Clever Cloud… Your source code has been pushed to Clever Cloud. Waiting for deployment to start… Deployment started (deployment_a13a283f-5e63-45da-b675-666603212a18) Waiting for application logs… [...] 2023-10-31T09:16:39.007Z: 2023.10.31 09:16:37 INFO ce[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube 2023-10-31T09:16:39.007Z: 2023.10.31 09:16:37 INFO ce[][o.s.c.c.CePluginRepository] Load plugins 2023-10-31T09:16:39.007Z: 2023.10.31 09:16:38 INFO ce[][o.s.c.c.ComputeEngineContainerImpl] Running Community edition 2023-10-31T09:16:39.007Z: 2023.10.31 09:16:38 INFO ce[][o.s.ce.app.CeServer] Compute Engine is started 2023-10-31T09:16:39.007Z: 2023.10.31 09:16:38 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up 2023-10-31T09:16:39.007Z: 2023.10.31 09:16:38 INFO app[][o.s.a.SchedulerImpl] SonarQube is operational Deployment successful
Le message Deployment successful
indique que notre instance est bien démarrée !
Nous pouvons maintenant ouvrir notre instance de SonarQube avec la commande :
$ clever open Opening the application in your browser
La page de démarrage de SonarQube s’ouvre :
Quelques instants plus tard, une fois que l’instance SonarQube est complètement démarrée, la page de login s’affiche :
Nous nous loguons avec les identifiants par défaut admin
/ admin
, puis nous changeons le mot de passe du compte admin
. Une fois ces étapes effectuées, la page d’accueil de notre instance SonarQube s’affiche :
Le message affiché en bas de page nous indique que notre déploiement est, certes, fonctionnel, mais non adapté à un usage en production. Nous allons donc maintenant utiliser une base de données externalisée.
Externaliser la base de données
Une base de données externalisée va permettre de rendre nos données persistantes. SonarQube est compatible avec les bases de données PostgreSQL, SQL Server et Oracle.
Clever Cloud propose diverses bases de données dans la section Add-On de la console, ou via les commandes CLI clever addon
. PostgreSQL fait partie des bases de données supportées, ce qui est parfait pour notre instance de SonarQube !
Créer l’addon PostgreSQL
Pour lister les addons disponibles, nous utilisons la commande clever addon providers
, ce qui va nous permettre de récupérer l’identifiant de l’addon PostgreSQL :
$ clever addon providers addon-matomo Matomo Analytics Matomo is a web analytics application as a service. addon-pulsar Pulsar Namespace with all Pulsar possibilities cellar-addon Cellar S3 storage S3-like online file storage web service config-provider Configuration provider Expose configuration to your applications (via environment variables) es-addon Elastic Stack Elasticsearch with Kibana and APM server as options fs-bucket FS Buckets Persistent file system for your application jenkins Jenkins Automation & CI with Clever Cloud runners mailpace MailPace - Transactional Email Fast & Reliable Transactional Email mongodb-addon MongoDB A noSQL document-oriented database mysql-addon MySQL An open source relational database management system postgresql-addon PostgreSQL A powerful, open source object-relational database system redis-addon Redis Redis by Clever Cloud is an in-memory key-value data store, powered by Clever Cloud
L’addon que nous allons utiliser est donc nommé postgresql-addon
.
Nous listons ensuite les différentes versions de l’addon PostgreSQL, et ses plans de facturation :
$ clever addon providers show postgresql-addon PostgreSQL: A powerful, open source object-relational database system Available regions: jed, mtl, par, rbx, rbxhds, scw, sgp, syd, wsw Available plans Plan dev Backups: Daily - 7 Retained Logs: No Max DB size: 256 MB Max connection limit: 5 Memory: Shared Metrics: No Migration Tool: Yes Type: Shared vCPUS: Shared Plan xxs_sml Backups: Daily - 7 Retained Logs: Yes Max DB size: 1 GB Max connection limit: 45 Memory: 512 MB Metrics: Yes Migration Tool: Yes Type: Dedicated vCPUS: 1 Available versions: 10, 11, 12, 13, 14 (default), 15 [...]
Le plan xxs_sml est le plus petit plan avec des ressources dédiées. 1 CPU, 512 Mo de RAM et 1 Go de stockage sont suffisants pour démarrer, sachant que le plan pourra être modifié à tout instant si besoin.
Nous pouvons maintenant créer notre addon avec la commande clever addon create
:
$ clever addon create \ --plan xxs_sml \ --org orga_a4fdf186-bcaa-4d9f-9249-b09d57bf4beb \ postgresql-addon \ sonarqube-db Addon sonarqube-db (id: addon_2cc8bfaf-8800-43ef-87a0-4f162be73f2e) successfully created
Une fois la commande exécutée, notre base de données apparaît dans la console :
Nous pouvons ensuite lier notre base de données avec notre application. Ce lien va permettre de partager des variables d’environnement entre la base de données et notre application :
$ clever service link-addon sonarqube-db Addon sonarqube-db successfully linked
Une fois l’application liée à la base de données, les variables d’environnement de la base de données apparaissent dans l’onglet Environment Variables de notre application :
Reconfigurer notre instance SonarQube
Notre addon Clever Cloud expose des variables d’environnement POSTGRESQL_ADDON qui vont nous servir pour configurer notre instance de SonarQube. Cependant, SonarQube se configure avec les variables d’environnement suivantes :
SONAR_JDBC_USERNAME SONAR_JDBC_PASSWORD SONAR_JDBC_URL
L’URL JDBC suit un schéma précis, qui est jdbc:<driver>//<host>:<port>/<db>
. Clever Cloud expose une variable d’environnement pour les host
, port
et db
, donc nous pouvons calculer notre variable SONAR_JDBC_URL
.
Malheureusement, ni SonarQube ni Clever Cloud ne supporte de renommer ses variables d’environnement, ou de les interpoler. Nous devons donc créer les variables d’environnement SONAR avec des valeurs en dur, issues des variables d’environnement POSTGRESQL_ADDON.
Notez que cette approche implique que notre application doit être reconfigurée en cas de changement de variables d’environnement, ce qui n’est pas idéal.
Nous allons donc dans un premier temps récupérer les variables d’environnement de notre application, et les stocker dans un fichier avec la commande clever env
. Nous chargeons ensuite le fichier créé avec la commande source
pour avoir les variables d’environnement disponibles dans notre shell :
$ clever env --add-export > clever-env-vars.sh $ source clever-env-vars.sh $ echo $POSTGRESQL_ADDON_USER u6qkhfs3dduj1rulra99
Les commandes suivantes permettent de configurer la connexion à notre base de données avec les variables d’environnement SONAR :
$ clever env set SONAR_JDBC_USERNAME $POSTGRESQL_ADDON_USER $ clever env set SONAR_JDBC_PASSWORD $POSTGRESQL_ADDON_PASSWORD $ clever env set SONAR_JDBC_URL "jdbc:postgresql://${POSTGRESQL_ADDON_HOST}:${POSTGRESQL_ADDON_PORT}/${POSTGRESQL_ADDON_DB}"
Pour déployer notre instance avec sa nouvelle configuration, il faut simplement redémarrer l’application avec la commande clever restart
:
$ clever restart
Une fois SonarQube redémarré, il nous demande à nouveau de changer le mot de passe de l’utilisateur admin
puisque le précédent mot de passe a été stocké dans la base de données embarquée, et donc perdu à la migration.
Conclusion
Il est relativement facile de déployer SonarQube sur Clever Cloud. L’image Docker fournie par SonarQube nous permet de démarrer rapidement une instance.
Les bases de données proposées par Clever Cloud sont également pratiques pour démarrer rapidement. Cependant, le manque de souplesse de SonarQube dans sa configuration et l’impossibilité de renommer des variables d’environnement sur Clever Cloud rendent la dernière étape de la configuration peu pratique et peu robuste.
Pour exécuter l’infrastructure proposée dans cet article, il vous en coûtera environ 81,25 €/mois :
article | prix/mois |
---|---|
PostgreSQL – XXS Small Space | 5,25 € |
Node Docker – Plan M | 76 € |
À titre de comparaison, un container de 4 CPU et 4 Go de RAM sur GCP Cloud Run coûte 174 €/mois, avec l’option CPU always allocated requise par SonarQube pour exécuter ses traitements en arrière-plan. Cela fait de Clever Cloud un excellent choix économique !
Les scripts de cet article sont disponibles sur Github.