Consulter la couverture de code
Nous avons réalisé un projet de développement logiciel en utilisant les outils de DevOps. Notre projet est une bibliothèque d’analyse de données Java similaire à Pandas en Python. Nous avons utilisé les outils suivants pour réaliser notre projet :
Pour installer notre projet, il suffit de cloner le dépôt GitHub sur votre machine locale. Pour cela, vous pouvez exécuter la commande suivante :
git clone https://github.com/tom7438/projetdevops.git
Nous avons utilisé GitHub Actions pour notre intégration continue. Nous avons créé un workflow qui permet de tester notre projet à chaque pull request sur la branche main (voir Travail collaboratif). Donc à chaque pull request, le workflow est déclenché et exécute les tests unitaires de notre projet ainsi que la couverture de code de notre class DataFrame. Si les tests passent et que la couverture de code est > 90 alors un des membres du groupe, peut faire sa review et décider ou non d’accepter le pull request afin de merger sur la branche main. Pour le code coverage, nous avons pris JaCoCo, c’était l’outil qui nous était présenté de base comme exemple pour le projet et comme nous n’en connaissions aucun autre, il convenait parfaitement. Nous avons choisi d’héberger notre projet sur GitHub, car c’est l’outil avec lequel nous sommes le plus familier, nous l’utilisons depuis un moment.
En ce qui concerne les tests unitaires, ils sont réalisés avec JUnit 5, il exploite les fonctionnalités de Java 8 ou version ultérieure, rendant les tests plus puissants et plus faciles à maintenir.
Nous avons utilisé le Feature Branch Workflow pour travailler sur notre projet. Le Feature Branch Workflow est un processus de développement logiciel dans lequel chaque fonctionnalité est développée dans une branche dédiée. Cette encapsulation permet à plusieurs développeurs de travailler facilement sur une fonctionnalité particulière sans perturber la base de code principale. Cela signifie également que la main branche ne doit jamais contenir de code défectueux, ce qui constitue un énorme avantage pour les environnements d’intégration continue.
Nous avons donc travaillé en développant chaque feature dans une branche différente, lorsque la feature était terminée et testée, un Pull Request est envoyé sur la branche main. Alors au moins une review du code doit être effectuée par l’un des autres collaborateurs du projet, s’il accepte, la feature peut ainsi être mergée sur la branche main. De plus, on ne peut pas merge une feature sur la branche main s’il n’y a pas au moins 90% de code coverage sur la feature. Cela permet de garder un pourcentage élevé de couverture de code et ainsi de s’assurer que notre projet est le plus fonctionnel possible.
Notre projet est également agrémenté d’une livraison continue. Pour cela, nous avons utilisé les outils suivants :
URL du projet : https://tom7438.github.io/projetdevops/
Pour utiliser notre bibliothèque d’analyse de données Java, vous pouvez importer notre projet dans votre IDE préféré. Ensuite, vous pouvez utiliser les fonctionnalités suivantes :
import java.util.LinkedHashMap;
List<List<Object>> data = new ArrayList<>();
data.add(Arrays.asList(1, "Alice",25));
data.add(Arrays.asList(2, "Bob",30));
data.add(Arrays.asList(3, "Charlie",35));
LinkedHashMap<String, Class<?>> schema = new LinkedHashMap<>();
schema.put("id", Integer.class);
schema.put("name", String.class);
schema.put("age", Integer.class);
DataFrame df = new DataFrame(data, schema);
// Version tableau
Object[][] data2 = {
{1, "Alice", 25},
{2, "Bob", 30},
{3, "Charlie", 35}
};
DataFrame df2 = new DataFrame(data2, schema);
DataFrame df = DataFrame.readCSV("data.csv");
df.display();
df.displayFirstLines(2);
df.displayLastLines(2);
// Sélectionner des lignes à partir de leur index
int[] rows = {0, 2};
DataFrame df2 = df.select_line(rows);
// Sélectionner des colonnes à partir de leur nom
String[] columns = {"name", "age"};
DataFrame df3 = df.select_column(columns);
// Obtenir les lignes dont la colonne "age" est supérieure à 25
String cond = "age > 25";
DataFrame df4 = df.select(cond);
// Ajouter une ligne
List<Object> ligne = Arrays.asList(4, "David", 40);
df.ajouter_ligne(ligne);
// Supprimer une ligne
df.supprimer_ligne(2);
// Afficher le minimum d'une colonne selon son nom ou selon son index de colonne si c'est des valeurs numériques
System.out.println(df.min("age"));
System.out.println(df.min(2));
// Afficher le maximum d'une colonne selon son nom ou selon son index de colonne si c'est des valeurs numériques
System.out.println(df.max("age"));
System.out.println(df.max(2));
// Afficher la moyenne d'une colonne selon son nom ou selon son index de colonne si c'est des valeurs numériques
System.out.println(df.mean("age"));
System.out.println(df.mean(2));
// Afficher la somme d'une colonne selon son nom ou selon son index de colonne si c'est des valeurs numériques
System.out.println(df.sum("id"));
System.out.println(df.sum(0));
int index = df.getIndexesColone("age");
Object value = def.obtenirValeur(1, "name");
cd terraform
terraform apply --auto-approve
# Se connecter à la VM en ssh
gcloud compute ssh --zone "us-central1-c" "terraform-instance-0" --project "devops2024rtl2"
# lancer l'image docker
sudo docker run ghcr.io/tom7438/projetdevops/rtl2_datalibrary:latest
mvn javadoc:javadoc
cat target/site/apidocs/index.html
Dans l’ensemble, nous avons apprécié travailler sur ce projet, qui nous a permis de mettre en pratique les différents concepts de DevOps que nous avons appris en cours. Nous avons rencontré quelques difficultés, notamment pour la mise en place de la livraison continue, mais nous avons réussi à les surmonter en travaillant ensemble. Nous avons également appris à mieux collaborer en utilisant les outils de DevOps, et donc mieux comprendre les avantages de ces outils. Nous sommes fiers du résultat final. Le fait de travailler en groupe était vraiment un plus, cela nous a permis de mieux comprendre les concepts de DevOps et de mieux les appliquer. Nous avons par ailleurs appris à mieux communiquer et à mieux travailler ensemble sur un même projet, ce qui est essentiel pour un projet de développement logiciel. Découvrir seuls le XML et yaml pour l’automatisation maven et les workflows GitHub Actions a été un peu difficile, mais nous avons réussi à les maîtriser grâce à la documentation et à l’aide de nos collègues. Nous avons essayé d’utiliser le plus possible les outils de DevOps pour améliorer notre projet et notre workflow, et nous pensons que cela a été un succès. Seul petit bémol, nous n’avons pas réussi à continuer à utiliser le projet Atlassian pour le suivi de projet.
M1 INFO 2023-2024