Ce dépôt contient une application de type Doodle composée d’un backend Quarkus, d’un frontend Angular et de services annexes déployés via Docker Compose.
Le projet a été réalisé dans un contexte DevOps avec deux objectifs principaux :
- corriger les problèmes bloquants pour faire fonctionner l’application en local ;
- ajouter des pratiques DevOps autour de l’intégration continue, de l’analyse statique et de l’automatisation des tests.
Le travail demandé consistait à partir d’une base déjà existante, à corriger les problèmes bloquants, puis à renforcer le projet avec des outils et pratiques de DevOps. L’objectif était de rendre le projet fonctionnel en local, puis d’ajouter des étapes d’automatisation pour garantir la qualité et la maintenabilité du code.
- Khawla Khallouq
- Niloy Roy
- Othniel Kombo
- Dominique Behi
- Préparer l’environnement local et faire fonctionner l’application existante.
- Corriger les problèmes bloquants côté backend, frontend et services Docker.
- Mettre en place l’automatisation des tests pour valider les évolutions.
- Ajouter l’intégration continue pour lancer les vérifications à chaque changement.
- Configurer l’analyse statique avec SonarQube et exploiter les rapports de qualité.
Le projet est organisé en plusieurs services :
api/: backend Quarkus exposant les API métier ;front/: application Angular utilisée comme interface utilisateur ;docker-compose.yml: orchestration locale des services ;- autres services : base de données MySQL, Etherpad, messagerie SMTP et SonarQube.
Avant de lancer le projet, il faut disposer au minimum de :
- Java 11 ;
- Maven ;
- Docker et Docker Compose ;
- Node.js et npm pour le frontend Angular.
Depuis la racine du dépôt :
docker compose up -dLes services principaux deviennent alors accessibles aux adresses suivantes :
- frontend : http://localhost:4200
- backend : http://localhost:8080
- Etherpad : http://localhost:9001
- SonarQube : http://localhost:9000
Pour arrêter l’environnement :
docker compose downLe projet initial présentait plusieurs problèmes empêchant son bon fonctionnement. Nous avons identifié et corrigé les principaux blocages suivants :
- Le lien entre le frontend et le backend était mal configuré.
- Le docker-compose n'était pas à jour avec les certaines versions des services.
On a corrigé ces problèmes en ajustant les configurations, et on a cré un docker-compose.yml qui lance le backend et le frontend correctement, avec tous les services nécessaires.
Nous avons ajouté des tests unitaires pour les composants critiques du backend. Ces tests sont écrits avec JUnit et Mockito pour assurer la couverture des fonctionnalités clés.
Nous avons mis en place une pipeline GitLab CI pour automatiser le build, les tests et le déploiement de notre projet Doodle DevOps. Le dépôt contient un backend Quarkus dans api/ et un frontend Angular dans front/, donc la pipeline est séparée pour couvrir ces deux parties.
Cette pipeline nous permet de vérifier automatiquement que le backend compile, que les tests passent, que le frontend se construit correctement, et que le déploiement peut être déclenché selon la branche.
Pour mettre en place et tester la pipeline en local, nous avons besoin de quelques outils de base :
- Git : pour cloner le dépôt et envoyer les changements.
- Docker et Docker Compose : pour lancer les services nécessaires au projet et tester l’environnement.
- Java 11 et Maven : pour le backend Quarkus dans
api/. - Node.js et npm : pour le frontend Angular dans
front/. - GitLab Runner : seulement si nous voulons exécuter la pipeline en local avec un runner installé sur notre machine.
La configuration est placée à la racine du dépôt dans le fichier .gitlab-ci.yml. GitLab détecte automatiquement ce fichier et lance les jobs à chaque push ou merge request sur les branches prévues.
Nous avons organisé la pipeline en trois stages :
build: pour compiler le backend et le frontend.test: pour lancer les tests automatisés.deploy: pour déployer l’application sur l’environnement de développement ou de production.
Nous utilisons une image Maven avec Java 11 pour compiler l’API Quarkus. Le job se place dans api/ puis lance mvn clean compile -DskipTests afin de vérifier que le code compile sans exécuter les tests à ce stade.
Pour le frontend, nous utilisons une image Node.js. Le job se place dans front/, exécute npm ci, puis lance npm run build -- --configuration production pour produire l’application Angular.
Nous lançons ensuite les tests unitaires du backend avec mvn test. Les rapports JUnit sont récupérés comme artefacts pour faciliter la lecture des résultats dans GitLab.
Nous lançons aussi les tests du frontend avec npm run test. Dans notre pipeline, cette étape est tolérante en cas d’échec partiel, car certains environnements Angular nécessitent des adaptations pour exécuter les tests headless.
Enfin, nous avons deux jobs de déploiement : un pour la branche develop et un pour master. Le déploiement s’appuie sur Docker et docker-compose.yml pour lancer les services de l’application.
stages:
- build
- test
- deployLa pipeline est déclenchée sur merge_requests, main, develop et master pour les jobs de build et de test, puis sur develop ou master pour les jobs de déploiement.
Nous avons ajouté du cache pour accélérer les exécutions : Maven conserve ses dépendances dans api/.m2/repository, et Node.js conserve front/node_modules/. Nous avons aussi ajouté des artefacts pour garder les dossiers target/, dist/ et les rapports de tests pendant un certain temps.
Il faut lancer les services :
docker compose up -d
Cela démarre notamment :
- SonarQube
- la base de données
- les services du projet
Si le SonarQube est bien démarré, il faut manuellement ouvrir dans le navigateur :
- Identifiant par défaut : admin
- Mot de passe par défaut : admin
Lors de la première connexion, il est obligatoire de changer le mot de passe.
Dans notre cas :
- Nouveau mot de passe : DevopsS82026!
Dans SonarQube :
- Il faut aller dans My Account, puis dans Security
- Il faut donner un nom au token (dans notre cas : DevOps), selectionner le type de token (dans notre cas : User Token) et la durée de validité (dans notre cas : 30 jours) et cliquer sur Generate
Nous avons obtenu le token suivant : squ_9ed49ef1d3c80b33d62bfbdc5eee986e625a7fd7
./mvnw clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:5.5.0.6356:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.token=squ_9ed49ef1d3c80b33d62bfbdc5eee986e625a7fd7
Après exécution : A l'exécution de la commande, il nous fournit une URL pour consulter les résultats de l'analyse. Dans notre cas : http://localhost:9000/dashboard?id=fr.istic%3AtlcdemoApp
Les résultats sont également accessibles manuellement via le tableau de bord de SonarQube, en cliquant sur le projet correspondant