Dev Ops
Dev Ops
Dev Ops
Qui suis-je ?
Qui êtes-vous ?
31/05/2022 2
Logistique
31/05/2022 3
Objectifs du module
31/05/2022 4
Sommaire
31/05/2022 5
INTRODUCTION À L’INTÉGRATION CONTINUE
Introduction À L’intégration Continue
• Agenda
– Définition de l’intégration continue
– Les principes de l’intégration continue
– Les prérequis de l’intégration continue
– Les différents outils de l’intégration continue
– Mise en place de l’environnement d’intégration continue
31/05/2022 7
Approche naïve de production du logiciel
31/05/2022 8
Approche naïve de production du logiciel
31/05/2022 9
Approche naïve de production du logiciel :
Le constat
• Le développement doit être incrémental pour gérer les incertitudes.
31/05/2022 10
Le besoin de disposer d’une usine
logicielle
• Une usine logicielle est une chaîne de fabrication du logiciel, depuis les
sources jusqu'au livrable.
• Elle permet d’automatiser toutes les tâches qui peuvent l’être dans le
cadre du processus de la production et la maintenance des livrables.
31/05/2022 11
Le besoin de disposer d’une usine
logicielle
31/05/2022 12
Les bénéfices d’une usine logicielle
31/05/2022 13
Problématique (1) – Intégration tardive
Module2
Modulei
Développement Intégration
31/05/2022 14
Problématique (2) – Coût de correction
des bugs
31/05/2022 15
La solution : L’intégration au plus tôt
31/05/2022 16
La solution : L’intégration au plus tôt
Intégration Intégration Intégration Intégration Intégration Intégration
Module1
Module2
Modulei
Développement
31/05/2022 17
Définition de l’intégration continue
31/05/2022 18
Les principes de l’intégration continue
31/05/2022 19
Les principes de l’intégration continue
• Construction automatique
– La construction englobe l’ensemble des actions souhaitées prenant en entrée des
fichiers sources pour produire un résultat souhaité.
– La construction doit être faite de sorte qu’elle soit automatisable.
– L’ensemble des étapes de la construction doit être réalisable par un outil de
construction logicielle.
– L’automatisation de la construction permet de lancer via une commande simple
un ensemble de processus complexes qui s’enchainent dans un ordre précis.
31/05/2022 20
Les principes de l’intégration continue
• Construction auto-testante
– Les tests font partie de la construction.
– Les tests doivent être exécutables dans un mode automatique pour qu’ils
puissent être pris en compte lors de la construction du logiciel.
– Les tests permettent de valider le bon fonctionnement du livrable produit par la
construction.
– L’échec d’un test entraine l’échec de la construction.
– Les tests doivent être passant à 100%.
31/05/2022 21
Les principes de l’intégration continue
31/05/2022 22
Les principes de l’intégration continue
31/05/2022 23
Les principes de l’intégration continue
31/05/2022 24
Les principes de l’intégration continue
31/05/2022 25
Les principes de l’intégration continue
31/05/2022 26
Les prérequis de l’intégration continue
31/05/2022 27
Les prérequis de l’intégration continue
31/05/2022 28
Les prérequis de l’intégration continue
31/05/2022 29
Les prérequis de l’intégration continue
– Une construction est dite cassée en cas de problème empêchant son succès :
• Erreur de compilation.
• Test en échec.
• Problème de déploiement.
• Etc…
– La réparation des constructions cassées est une urgence pour le projet.
– Le responsable du commit à l’origine de l’échec de la construction porte la
responsabilité de la réparation.
31/05/2022 30
Les prérequis de l’intégration continue
31/05/2022 31
Les bénéfices de l’intégration continue
31/05/2022 32
Les bénéfices de l’intégration continue
31/05/2022 33
Les bénéfices de l’intégration continue
31/05/2022 34
Les bénéfices de l’intégration continue
31/05/2022 35
Les bénéfices de l’intégration continue
– Permet de s’immuniser contre l’effet tunnel, première cause d’échec des projets
informatiques.
31/05/2022 36
Les bénéfices de l’intégration continue
31/05/2022 37
Les bénéfices de l’intégration continue
31/05/2022 38
Les outils de l’intégration continue
• Un atelier de développement :
– Facilite la production du code source.
• Un gestionnaire de sources :
– Partager le code source, documentation, etc.
– Tracer toutes les modifications.
• Un système de test unitaires :
– Contrôler la validité du code source.
– Détecter les régressions.
– Peut être lancé en mode automatique ou en mode manuel.
31/05/2022 39
Les outils de l’intégration continue
• Un outil de construction:
– Gérer les dépendances.
– Automatiser la génération de l’exécutable à partir du code source.
• Un serveur d’intégration continue :
– Surveiller les changements apportés au code source.
– Exécuter une construction d’intégration à chaque changement du code source.
• Un outil de surveillance de la qualité du code :
– Inspecter le code source.
– Établir des métriques sur la complexité du code, le taux de commentaire, le code
dupliqué, etc.
31/05/2022 40
Les outils de l’intégration continue
• Un repository manager :
– Gérer les composants binaires.
– Les dépendances du projet
– Les artefacts produits par le projet.
• Un outil de communication :
– Informer en temps réel de l’état de la construction d’intégration.
31/05/2022 41
Environnement d’intégration continue
31/05/2022 42
Sommaire
31/05/2022 43
LE GESTIONNAIRE DE SOURCES
Le Gestionnaire De Sources
• Agenda
– Les objectifs de la gestion de sources
– Les fonctionnalités
– Les différents gestionnaires de sources
– Les problématiques d’intégration des changements
31/05/2022 45
Les objectifs de la gestion de sources
• Gérer les activités de lecture, écriture et fusion sur les sources du projet.
• Conserver un historique des modifications apportées aux sources:
– Par qui, quand, quoi ?
• Permettre de revenir en arrière en cas de besoin.
• Permettre de travailler en équipe sur les mêmes sources d'un projet.
– Gérer les accès concurrents.
– Gérer les conflits.
• Permettre de travailler simultanément sur plusieurs versions d’un
logiciel.
31/05/2022 46
Les objectifs de la gestion de sources
31/05/2022 47
Les fonctionnalités : Repository
31/05/2022 48
Les fonctionnalités : Version
• Une version ou révision est une instance d'un fichier source qui est
strictement distincte des autres instances.
• Les versions peuvent se succéder de manière linéaire dans le temps.
31/05/2022 49
Les fonctionnalités : Branche
• Permet de développer en
parallèle plusieurs versions du
logiciel.
• Permet de corriger un
problème sur une ancienne
version du logiciel.
• Permet de fusionner après
une divergence.
31/05/2022 50
Les fonctionnalités : Tag
31/05/2022 51
Les différents gestionnaires de sources :
Modèle centralisé (1)
• Centralized Version Control System – CVCS
31/05/2022 52
Les différents gestionnaires de sources :
Modèle centralisé (2)
• Le dépôt est stocké dans un endroit partagé.
• Chaque développeur a une copie de travail du dépôt.
• Utilise le mode de verrouillage pour gérer les développements
concurrents sur un même fichier source.
• Il est nécessaire d’avoir la connexion au dépôt pour commiter ses
modifications ou mettre à jour sa copie de travail.
31/05/2022 53
Les différents gestionnaires de sources :
Modèle centralisé (3)
• Avantages :
– Technologie éprouvée.
– Structure simple.
– Gestion et utilisation simples à mettre en œuvre.
– Largement disponible (IDE, Forges).
• Faiblesses :
– Très sensible aux pannes, impossible de travailler hors connexion.
– Inadapté aux très grands projets, le temps de mise à jour du dépôt est trop long.
31/05/2022 54
Les différents gestionnaires de sources :
Modèle centralisé – Exemple Subversion
• Créé en 2000 pour remplacer CVS.
• Logiciel libre.
• Multi-plateforme (linux, windows, MacOS, ...).
• Documentations très riches, forums actifs.
• Implémente des protocoles réseaux sécurisés
(HTTPS) .
• Interfaces graphiques.
• Intégré dans plusieurs IDE tel que Eclipse.
31/05/2022 55
Les différents gestionnaires de sources:
Modèle distribué (1)
• Distributed Version Control System – DVCS
31/05/2022 56
Les différents gestionnaires de sources:
Modèle distribué (2)
31/05/2022 57
Les différents gestionnaires de sources:
Modèle distribué (3)
• Avantages :
– Travail déconnecté, accès aux dépôts en local sur le poste de travail du
développeur.
– Moins sensible aux pannes.
– Rapidité, le réseau n’est utilisé que pour les opérations de synchronisation.
– Branches privées.
– Modèle de développement autorisé très souple.
• Faiblesses :
– Gestion et utilisation plus compliquées.
– Risque de divergence, peut devenir très complexe structurellement.
31/05/2022 58
Les différents gestionnaires de sources:
Modèle distribué – Exemple Git
• Créé en 2005 par Linus Torvalds pour la gestion des sources du noyau
Linux.
• Logiciel libre.
• Multi-plateforme (linux, windows, MacOS, ...).
• Documentations très riches, forums actifs.
• Implémente des protocoles réseaux sécurisés (HTTPS) .
• Interfaces graphiques.
• Intégré dans plusieurs IDE tel que Eclipse.
• Ne stocke que le delta entre deux versions d’un objet.
31/05/2022 59
Labs
31/05/2022 61
Problématiques de fusion des
changements
• La publication régulière du code source :
– Réduit le risque de conflit.
– Facilite l’identification de la modification à l’origine du problème.
• Pour pouvoir publier régulièrement le code source il faut :
– Publier les modifications apportées à la fin de chaque tâche de développement.
– Faire des petits changements et ne pas apporter des changements à plusieurs
composants dans une seule tâche.
31/05/2022 62
Problématiques de fusion des changements:
Bonnes pratiques
• Essayez de travailler le plus possible avec des fichiers texte et le moins
possible avec des fichiers binaires.
• Faites des updates le plus souvent et régulièrement possible, et
obligatoirement avant de commencer à travailler sur un fichier.
• Faites des commits réguliers, dès que vous avez fini de travailler sur un
fichier, et si la tâche prend du temps, un commit intermédiaire
permettra de sauvegarde votre travail.
• Prévoyez un planning pour savoir qui peut travailler et quand sur les
fichiers binaires notamment.
31/05/2022 63
Labs
31/05/2022 65
L’AUTOMATISATION DES BUILDS
L’automatisation Des Builds
• Agenda
– Qu’est ce que la construction d’un logiciel
– Objectifs des outils de construction
– Prérequis d'une construction automatisable
– Différents types de constructions
– Construction logicielle avec Maven
31/05/2022 67
Qu’est ce que la construction d’un logiciel
31/05/2022 68
Objectifs des outils de construction
31/05/2022 69
Prérequis d'une construction
automatisable
• Une construction logicielle est dite automatique quand toutes ses
étapes :
– Sont répétables.
– Ne nécessitent aucune intervention humaine.
– Peut être exécutée à tout moment sans besoin d’information autre que « où est
stocké le code source du projet »?
31/05/2022 70
Les différents types de construction
• Les termes construction et build seront utilisés indifféremment.
• Build: un ensemble d’activités qui permettent de:
• Compiler le code source.
• Générer de la documentation.
• Tester le code source.
• Inspecter le code source.
• Déployer le logiciel généré à partir du code source.
• Build privé: un build exécuté sur le poste de travail du développeur avant de
partager ses modifications de code source avec l’équipe.
• Peut se restreindre à un sous ensemble de tâches du build en fonction de la
taille du projet.
31/05/2022 71
Les différents types de construction
31/05/2022 72
Construction logicielle avec Maven :
Présentation de Maven
• Un outil de construction d'application Java:
– Génère une application « déployable » à partir d'un code source.
– Compile.
– Exécute des tests.
• Un outil de gestion de développement qui permet de gérer :
– Documentation & Rapports.
– Site web, etc…
• Projet Apache :
– http://maven.apache.org
– Développé en Java
31/05/2022 73
Construction logicielle avec Maven : Les
concepts Maven
• Privilégier la standardisation à la liberté, Convention over Configuration :
– Structure standard des répertoires d'une application
– Cycle de développement standard d'une application
• Factoriser les efforts :
– Un dépôt global regroupant les ressources / bibliothèques communes.
– Des dépôts locaux.
– Un dépôt personnel.
• Multiplier les possibilités:
– Une application légère.
– De nombreux plugins, chargés automatiquement au besoin.
31/05/2022 74
Construction logicielle avec Maven :
Vocabulaire Maven
• Plugin :
– Extension de l'application de base, proposant un ensemble de goals.
– Le noyau de Maven constitue un framework d’exécution de plugin.
• Goal :
– Tâche proposée par un plugin permettant de lancer un certain nombre d'action.
– Invoqué par mvn plugin:but.
– Paramétré par -Dparam=valeur.
• Maven Project Lifecycle:
– Détermine clairement comment est construit un artefact.
31/05/2022 75
Construction logicielle avec Maven :
Vocabulaire Maven
– Une séquence de phases qui permettent d'ordonner des groupes de goals.
• Phase:
– Étape du cycle de développement d'un logiciel, généralement associée à des
buts.
– Exécutée avec la commande mvn phase.
• Artifact:
– Application dont le développement est géré via Maven.
• POM:
– Un projet est décrit par un fichier XML mettant le projet en place.
– Ce fichier est appelé POM pour Projet Object Model.
31/05/2022 76
Construction logicielle avec Maven :
Exemples de plugins et goals Maven
• Plugin archetype:
– Usage: pour créer de nouveaux projets standards.
– Goals: generate, create.
• Plugin compiler:
– Usage: pour la compilation de code java.
– Goals: compile.
• Plugin jar:
– Usage: pour générer des artefacts de type jar.
– Goals: jar, test-jar.
• Plugin surefire:
– Usage: pour l'exécution des tests
– Goals: test.
31/05/2022 77
Construction logicielle avec Maven : Cycle
de vie, phases et goals
• Exécution du cycle de vie:
– Exécution des phases associées.
• Exécution d'une phase:
– Exécution des goals associés.
– Exécution de la phase précédente.
• Exécution d'un goal:
– Exécution du goal seulement.
31/05/2022 78
Construction logicielle avec Maven : Cycle
de vie
• Il existe trois cycles de vie implémentés par Maven.
• Le cycle de vie Clean:
– Nettoie l’environnement de construction des fichiers générés par la précédente
construction.
• Le cycle de vie Default:
– Traite la construction et le déploiement du projet.
• Le cycle de vie Site:
– Génère la documentation du projet sous forme d’un site web.
• Chacun de ces cycles de vie consiste en un ensemble de phases
exécutées dans un ordre spécifique,
31/05/2022 79
Construction logicielle avec Maven : Le
cycle de vie Default
• Cycle de vie par défaut permettant de construire un projet java.
• Composé de 23 phases.
– Validate : valide que le projet est correct et que les informations nécessaires à la
construction sont disponibles.
– Compile : compile le code source du projet.
– Test : Teste le code source compilé du projet.
– Package : génère le livrable dans le format attendu.
– Verify : vérifie les résultats des tests d’intégration.
– Install : installe le livrable dans un dépôt local.
– Deploy : installe le livrable dans un dépôt distant.
31/05/2022 80
Construction logicielle avec Maven : Le
cycle de vie Clean
• Le cycle de vie Clean permet de nettoyer la précédente construction.
• Composé de 3 phases :
– Pre-clean
– Clean
– Post-clean
• La commande mvn clean supprime le répertoire de la construction.
• Le comportement de cette commande peut être personnalisé en
précisant le goal à exécuter mvn clean:goal.
31/05/2022 81
Construction logicielle avec Maven : Le
cycle de vie Site
• Le cycle de vie Site permet de générer la documentation du projet.
• Composé de 4 phases :
– Pre-site
– Site
– Post-site
– Site-deploy
31/05/2022 82
Construction logicielle avec Maven : POM
– Structure du fichier
31/05/2022 83
Construction logicielle avec Maven : POM
- XML
31/05/2022 84
Construction logicielle avec Maven : POM
- Minimaliste
• Compile le code source du projet.
• Exécute les tests.
• Génère un package jar.
• Déploie le package jar généré dans un dépôt local.
31/05/2022 85
Construction logicielle avec Maven : POM
- Coordonnées
• GroupId :
– En général, le nom du domaine à l'envers.
• ArtifactId :
– Nom de l’artefact généré par le projet.
• Version :
– majorVersion.minorVersion.incrementalVersion-qualifier.
– Permet d’identifier le numéro du build du projet.
• Packaging :
– Type de paquetage à produire (jar, war, ear, etc.).
• Le tuple GroupId, ArtifactId, Version constitue l’identifiant de l’artefact du
projet.
31/05/2022 86
Construction logicielle avec Maven :
Structure des répertoires projet
■ pom.xml Exemple de projet :
■ src
– main
■ java
■ resources
– test
■ java
■ resources
■ target
– classes
– test-classes
31/05/2022 87
Construction logicielle avec Maven :
Gestion des dépendances
• Un des points forts de Maven qui simplifie le développement des
projets Java.
• Permet une construction facile du classpath.
• Une résolution des dépendances transitives :
– Permet de récupérer automatiquement les dépendances d’une dépendance et
de les inclure dans le projet.
– Il n’y a pas de limites sur le nombre de niveaux de résolution des dépendances.
– Possibilité d’exclure des dépendances récupérées par transitivité.
31/05/2022 88
Construction logicielle avec Maven :
Gestion des dépendances
• Spécifiées par :
– Un identifiant (group/artifact/version)
– Une portée (scope).
• Version
– 1.2.3 : si possible 1.2.3 si non plus récent.
– [1.2,1.3] : de 1.2 à 1.3 inclus.
– (1.2,1.4) : à partir de 1.2, mais avant 1.4.
– (,2.0) : antérieur à 2.0.
– [1.4,] : à partir de 1.4.
– [1.2.3] : 1.2.3 absolument.
31/05/2022 89
Construction logicielle avec Maven :
Gestion des dépendances
• Portée
– Compile : nécessaire à la compilation, et inclus
dans le paquetage (portée par défaut).
– Provided : nécessaire à la compilation, non
packagé (ex : Servlets).
– Runtime : nécessaire pour exécution et test,
mais pas compilation (exemple : driver jdbc).
– Test : nécessaire uniquement pour les tests
(exemple : junit).
– System : comme provided + chemin dans le
système de fichiers à préciser.
31/05/2022 90
Construction logicielle avec Maven :
Gestion des Repositories
• Gère les artefacts des projets ainsi que leurs dépendances.
• Peut stocker des artefacts de type jar, war, ejb, rar, ear.
• Deux types de repository existent :
– Local.
– Remote.
• Un repository peut être snapshot ou release.
• Repositories par défaut :
– Local sous le home de l’utilisateur.
– http://repo.maven.apache.org/maven2/
31/05/2022 91
Construction logicielle avec Maven :
Gestion des Repositories
31/05/2022 92
Labs
31/05/2022 94
LE SERVEUR D’INTÉGRATION CONTINUE
JENKINS
Le Serveur D’intégration Continue Jenkins
• Agenda
– Le serveur Jenkins
– Le rôle du serveur Jenkins
– Les grandes fonctionnalités
– Configuration du serveur Jenkins
– La gestion des plugins Jenkins
– Les plugins les plus utilisés
– Gestion des utilisateurs et des autorisations
– Gestion de l’espace disque
– Le monitoring du serveur Jenkins
– Création de Job Jenkins
31/05/2022 96
Le serveur Jenkins
• Jenkins a été créé par Kohsuke KAWAGUCHI en 2004 sous le nom Hudson.
• Jenkins est un fork du serveur Hudson depuis 2011.
• Jenkins est développé en Java et Groovy.
• Jenkins s’exécute dans un conteneur de Servlet de type Apache Tomcat.
• Jenkins est perçu comme le serveur d’intégration continue le plus populaire
du marché.
• Jenkins est un logiciel libre, publié sous licence MIT.
• Jenkins est supporté par une grande communauté et une documentation
complète.
• Le site de référence de Jenkins est : https://jenkins.io/
31/05/2022 97
Le rôle du serveur Jenkins
• Développement normal :
31/05/2022 99
Le rôle du serveur Jenkins
• Jenkins peut être utilisé par des équipes de toutes tailles, pour des
projets dans une grande variété de langages de programmation, y
compris Java, .NET, Ruby, Groovy, Grails, PHP etc.
• L'interface utilisateur de Jenkins est simple, intuitive.
31/05/2022 100
Les grandes fonctionnalités
• Jenkins est l'un des serveurs d’intégration continue les plus populaires
sur le marché en raison de :
– Installation facile sur différents systèmes d'exploitation.
– Mise à jour facile, Jenkins a des cycles de livraison très rapides.
– Facilement configurable via une interface graphique d’administration.
– Facilement extensible avec l'utilisation de plugins tiers, plus de 1400 plugins
maintenus par une communauté hyperactive permettant la construction, le
déploiement et l'automatisation de tout type de projet.
– Interface utilisateur simple et facile à utiliser.
31/05/2022 101
Les grandes fonctionnalités
31/05/2022 102
Les grandes fonctionnalités
31/05/2022 103
Les grandes fonctionnalités
31/05/2022 104
Les grandes fonctionnalités
31/05/2022 105
Qu'est-ce que Jenkins ne fait pas?
• Le café
• Traiter les Jiras (un système de suivi de bugs) à votre place
• Ecrire les tests à votre place
• Relire le code des autres à votre place
31/05/2022 106
Installation du serveur Jenkins
I. Docker
II. Linux : via un package/repo
III. Windows : via un installateur
IV. A la main via « java –jar » avec « systemd »
31/05/2022 107
I. Docker
31/05/2022 108
I. Docker
• Inconvénients
– Si on veut que Jenkins lance des images docker, ça fera du docker dans docker
(pas si simple) et/ou peut apporter des risques de sécurité
– On ne peut a priori pas mettre à jour Jenkins via son outil intégré
31/05/2022 109
II. Linux
31/05/2022 110
II. Linux
31/05/2022 111
II. Linux
31/05/2022 113
II. Linux
• Avantages
– La version est un peu plus récente que sous Docker (au moment ou j’ai testé :
2.164.2 au lieu de 2.121.1), pour une raison que j’ignore
– Tout le paramétrage, les données et logs sont facilement accessibles sur le
filesystem, et « rangés » suivant les normes de la distribution.
– On peut facilement changer les paramètres de lancement de Jenkins (dans
/etc/sysconfig/jenkins sous CentOS, dans /etc/default/jenkins sous
Debian/Ubuntu).
31/05/2022 114
III. Windows : via un installateur
31/05/2022 115
III. Windows : via un installateur
31/05/2022 116
III. Windows : via un installateur
31/05/2022 117
III. Windows : via un installateur
• Avantages
– La version est un peu plus récente que sous Docker (au moment ou j’ai testé :
2.164.2 au lieu de 2.121.1), pour une raison que j’ignore
– Tout le paramétrage, les données et logs sont facilement accessibles sur le
filesystem, et « rangés » suivant les normes.
– On peut facilement changer les paramètres de lancement de Jenkins (dans
/etc/sysconfig/jenkins sous CentOS, dans /etc/default/jenkins sous
Debian/Ubuntu).
31/05/2022 118
IV. A la main via « java –jar »
31/05/2022 119
Labs
31/05/2022 122
Configuration du serveur Jenkins :
Configuration globale des outils (2)
• La vue par défaut « Configuration globale des outils » permet de
configurer les installations des JDK et Maven qui peuvent être utilisées
par Jenkins pour construire des projets.
• Cette vue peut être enrichie avec l’installation des plugins pour
accomplir des tâches spécifiques.
31/05/2022 123
Labs
31/05/2022 126
La gestion des plugins Jenkins (3)
31/05/2022 127
Les plugins les plus utilisés
31/05/2022 128
Labs
31/05/2022 130
Création de Job Jenkins (2)
31/05/2022 131
Création de Job Jenkins (3)
31/05/2022 132
Création de Job Jenkins (4)
• La section « General »
permet de configurer
des informations
générales sur le projet,
telles que son nom et
une description, le
nombre de
constructions à
conserver en
historique.
31/05/2022 133
Création de Job Jenkins (5)
• La section « Gestion
de code source »
permet de configurer
l’accès au dépôt Git
contenant le code
source du projet.
31/05/2022 134
Création de Job Jenkins (6)
• La section « Ce qui
déclenche le build » permet
de configurer l’élément
déclencheur de
construction.
– Une construction est
programmée toutes les 5
minutes.
31/05/2022 135
Création de Job Jenkins (7)
31/05/2022 136
Création de Job Jenkins (8)
• Sauvegarder la configuration
du Job et cliquer sur le bouton
« Lancer un build » pour lancer
la construction du projet
immédiatement.
– L’avancement de la construction
du projet est visible dans la
widget « Historique des builds ».
31/05/2022 137
Création de Job Jenkins (9)
31/05/2022 138
Création de Job Jenkins (10)
• Les résultats de l’exécution des tests unitaires sont accessibles via le lien
« Derniers résultats des tests ».
31/05/2022 139
Création de Job Jenkins (11)
31/05/2022 140
Labs
31/05/2022 142
Builds réguliers
31/05/2022 143
Utilisation des WebHooks
31/05/2022 144
Utilisation des WebHooks
31/05/2022 145
Utilisation des WebHooks
31/05/2022 146
Utilisation des WebHooks
31/05/2022 147
Utilisation des WebHooks
31/05/2022 148
Labs
31/05/2022 150
Qu’est ce qu’un Pipeline ?
31/05/2022 151
Qu’est ce qu’un Pipeline ?
31/05/2022 152
Exemple de pipeline
pipeline {
agent any
stages {
stage('Hello') {
steps { echo 'Hello World' }
}
stage('Java Version') {
steps { bat 'cmd /c java -version' }
}
}
}
31/05/2022 153
Labs
31/05/2022 157
Utilisation distribuée de Jenkins
31/05/2022 158
BONNE PRATIQUE
• Pensez toujours à exécuter les futurs Jobs Jenkins sur des Agents
(nœuds Agents) afin de soulager le master qui est déjà très occupé à
gérer l’interface Jenkins.
31/05/2022 159
Utilité des distributions de traitements
• Cela peut
particulièrement
être utile pour
différentier
différents
environnements :
dev , Tes, recette,
préprod, prod
31/05/2022 160
Préparer un nœud Jenkins - SSH
31/05/2022 161
Préparer un nœud Jenkins - SSH
• Valider la communication entre l’hôte et l’agent
via SSH
– Par exemple si le host est sous windows , avec
putty.exe valider connexion ssh
31/05/2022 163
Ajouter un agent
31/05/2022 164
Ajouter un agent : Explication de la configuration
1. Nom : nom de l’agent
2. Nombre d’exécutors (Ex : 2) : Nombre de job en parallèle que l’agent
peut exécuter.
3. Remote root directory : répertoire de l’agent dans lequel seront stockés
les fichiers de Jenkins (Jobs / workspace) (existant avec les privilèges nécessaires)
4. Etiquette (Label) : utilisé pour grouper un certain nombre d’agents dans
un nom logique. Tous les agents qui auront ce label sont susceptible
d’être sollicité pour exécuter un job affecté au nom du label
(typiquement ds un pipeline label ‘ubuntu’
Exemple : vous avez plusieurs agents ubuntu et vous souhaitez qu’un
job soit exécuté sous ubuntu. Vous pouvez configurer tous vos agents
ubuntu avec le label/etiquette ‘ubuntu’
31/05/2022 165
Ajouter un agent : Explication de la configuration
1. Usage : quand utiliser cet agent ? dès que possible ou seulement lorsque le
label ‘ubuntu’ est sollicité ?
2. Méthode de lancement : SSH
3. Host : ip de l’agent
4. Crédential : login/pwd du compte système de l’agent
5. Host key Verification Strategy : choisir ‘Manualy trusted key verification
strategy’
6. Ne pas cocher ‘Require manual verification of initial connection’
7. Disponibilité : par défaut ‘Keep this agent online as much as possible’
8. Propriétés du noeud : préférence d’outils de l’agent. Laisser par défaut.
31/05/2022 166
Lancer l’agent
31/05/2022 167
Affichage des nœuds
31/05/2022 168
Créer un job et l’exécuter dans l’agent.
31/05/2022 169
Créer un job et l’exécuter dans l’agent.
31/05/2022 170
Créer un job et l’exécuter dans l’agent.
31/05/2022 171
Labs
31/05/2022 173
VIRTUALISATION D’ENVIRONNEMENT : DOCKER
DOCKER
• Agenda
– Présentation du Docker
– Travailler avec des conteneurs docker
– Travailler avec des images docker
31/05/2022 175
Présentation de Docker
31/05/2022 176
Qu'est-ce la virtualisation ?
31/05/2022 177
Utilité de la virtualisation ?
31/05/2022 178
Utilité de la virtualisation ?
31/05/2022 179
Machines virtuelles vs Docker
Rest API
CLI Dockerfile
Containers
31/05/2022 180
Machines virtuelles
31/05/2022 181
Hyperviseur vs Docker
31/05/2022 182
Docker : Présentation
31/05/2022 183
Editions Docker : CE et EE
31/05/2022 184
Version de Docker CE et EE
31/05/2022 185
Docker : un LXC augmenté
Définition de LXC :
• LXC est un ensemble d'outils en espace utilisateur permettant de
contrôler les LinuX Containers, un mécanisme léger de système virtuel.
31/05/2022 186
Docker : un LXC augmenté
• L'idée consiste à utiliser LXC comme base, puis à ajouter des capacités
de niveau supérieur
• Docker autorise la portabilité entre machines (qui exécutent aussi
Docker) et permet ainsi à une application et à ses composants d'exister
en tant qu'objet mobile unique.
• Avec LXC, déplacer une application sur une autre machine peut
introduire des différences susceptibles d'empêcher le conteneur de
l'application de s'exécuter.
31/05/2022 187
Architecture du docker
31/05/2022 188
Terminologie Docker
• Architecture Client/Serveur :
– Serveur = moteur ou daemon,
– Client = docker CLI
• Le client Docker communique avec le Docker daemon pour construire et gérer les conteneurs
• Le client Docker et le daemon Docker peuvent tourner sur la même machine, comme sur des
machines différentes
– Api REST qui permet de communiquer avec le daemon
• Docker File : C’est un fichier contenant l’ensemble des
commandes pour construire une image. Ce fichier
descriptif permet de construire automatiquement des
images.
31/05/2022 189
Terminologie Docker
31/05/2022 190
Docker : Architecture
31/05/2022 191
Docker : Architecture
31/05/2022 192
Docker : Images
31/05/2022 193
Docker : Images
• Les images sont utilisées pour stocker, déployer et exécuter des applications.
31/05/2022 194
Docker : Container
31/05/2022 195
Docker : Registre (Registry)
• Les registres Docker sont des services qui fournissent des emplacements
à partir desquels vous pouvez stocker et télécharger des images.
31/05/2022 196
Labs
Installation Docker CE
31/05/2022 197
Travailler avec des conteneurs
docker
31/05/2022 198
Rechercher une image
• Les images sont disponibles dans un registre Docker privé ou publique
31/05/2022 199
Télécharger une image
# docker pull NAME[:TAG]
# docker pull --all-tags centos Télécharger toutes les versions d’une image
# docker ps --help
31/05/2022 203
Consulter les logs des conteneurs
# docker logs –t -f
31/05/2022 205
Supprimer un conteneur
rm
Lister les conteneurs en cours d'exécution et arrêté
-f : Forcer la suppression
# docker rm –help
31/05/2022 206
Définition de la stratégie de redémarrage
sur un conteneur
# docker run --restart=POLICY [ OPTIONS ] IMAGE[:TAG] [COMMAND] [ARG...]
31/05/2022 208
Exécuter un nouveau processus dans un
conteneur en cours d'exécution
• L'option exec permet d’injecter un nouveau processus dans un
conteneur en cours d'exécution.
# docker exec [-d|--detach[=false]] [--help] [-i|--interactive[=false]]
[-t|--tty[=false]] CONTAINER COMMAND [ARG...]
31/05/2022 209
Examiner un container
Examiner les statistiques d’utilisation (cpu, ram, net, bloc i/o...) pour un ou
plusieurs containers en cours de fonctionnement :
# docker stats [OPTIONS] [NAME|ID]
31/05/2022 210
Examiner un container
31/05/2022 211
Labs
31/05/2022 212
Travailler avec des images docker
31/05/2022 213
Créer un compte avec Docker Hub
• Il s'agit d'un registre public sur lequel vous pouvez héberger des images à la fois
publiques et privées, les partager et collaborer avec d'autres.
• Il est intégré à GitHub, Bitbucket et peut déclencher des builds automatisés.
• Un référentiel peut contenir différentes versions d'une image.
• Par défaut, un référentiel privé + plusieurs référentiels publics
https://hub.docker.com/
# docker login
31/05/2022 214
Créer une image à partir du conteneur
(1/2)
Il existe plusieurs façons de créer des images, l'une consiste à valider
manuellement des couches et l'autre à utiliser Dockerfiles.
# docker commit -a|--author[=""] -m|--message[=""] CONTAINER [REPOSITORY[:TAG]]
31/05/2022 215
Créer une image à partir du conteneur
(2/2)
Pour rechercher des fichiers modifiés depuis le démarrage du conteneur:
# docker diff Conteneur
31/05/2022 216
Publication d'une image dans le registre
31/05/2022 2 217
Historique d'une image
# docker history [ OPTIONS ] IMAGE
31/05/2022 218
Supprimer une image
# docker rmi [ OPTIONS ] IMAGE [IMAGE...]
31/05/2022 219
Exporter/Importer une image
# docker save [-o|--output=""] IMAGE [:TAG] Image
31/05/2022 220
Création d'images à l'aide de Dockerfile
31/05/2022 221
Création d'images à l'aide de Dockerfile
• Exemple :
FROM centos:latest
MAINTAINER JEMAL
CMD date
# docker build .
31/05/2022 222
Le format du Dockerfile
31/05/2022 225
Le format du Dockerfile
ENTRYPOINT import.sh
WORKDIR /opt
31/05/2022 226
Le format du Dockerfile
• ADD : copier des fichiers et des répertoires du système hôte vers l'image
pendant la construction.
ADD <src> <dest>
VOLUME /data
EXPOSE 80
EXPOSE 443
31/05/2022 228
Le format du Dockerfile
ENV PATH=$PATH:/usr/local/pgsql/bin/
ENV CONT_IMG_VER=v1.0.0
USER patrick
31/05/2022 229
Exemples du Dockerfile (1/2)
FROM centos:7
• Empaquetage du Maintainer jmlhmd@gmail.com
serveur Apache RUN yum update -y && yum clean all
dans un conteneur RUN yum install httpd -y && yum clean all
RUN echo "Ceci est un exemple pour créer une image basé \
sur Centos avec Le serveur Web pré-installé" \
> /var/www/html/index.html
31/05/2022 230
Exemples du Dockerfile (2/2)
• Empaquetage
d'une application FROM ubuntu:14.04
Flask dans un
RUN apt-get update
conteneur RUN apt-get install -y python
RUN apt-get install -y python-pip
RUN apt-get clean all
RUN pip install flask
CMD ["python","/tmp/hello.py"]
31/05/2022 231
Labs
31/05/2022 232
Sommaire
31/05/2022 233
GESTION DES LIVRABLES
31/05/2022 234
Gestion des livrables
• Agenda
– Notion de dépôt d'artefacts
– Stratégie de mise à disposition du résultat construit
– Le gestionnaire de dépôt d'artefacts Archiva
31/05/2022 235
Notion de dépôt d'artefacts
31/05/2022 236
Notion de dépôt d'artefacts
31/05/2022 239
Les gestionnaires de dépôt d'artefacts
31/05/2022 240
Les gestionnaires de dépôt d'artefacts :
Apache archiva
• Apache Archiva est un logiciel de gestion de dépôt d’artefacts qui
permet de gérer des dépôts d'artefacts personnels ou internes à une
organisation.
• Archiva permet de gérer des dépôts d’artefacts de type:
– Internal: permet de gérer les artefacts de release ayant une version fixe. Ces
versions sont testées, validées et ne sont plus en cours de développement.
– Snapshot: permet de gérer les artefacts de snapshot qui sont encore en cours de
développement. Le numéro de version de ces artefacts porte le suffixe
SNAPSHOT.
31/05/2022 241
Les gestionnaires de dépôt d'artefacts :
Apache archiva
31/05/2022 242
Labs
31/05/2022 244
L’AUTOMATISATION DES TESTS
31/05/2022 245
L’automatisation des tests
• Agenda
– Les différents types de tests
– Les outils de test
– Automatisation des tests
– Les environnements de test
– Configuration des rapports de test dans Jenkins
– Consultation des rapports de test dans Jenkins
31/05/2022 246
Les différents types de tests : Les tests
unitaires
• Un test unitaire est un procédé permettant de s'assurer du bon
fonctionnement d'une unité de programme isolée de tout autre facteur.
• Il s’agit de vérifier, en fonction de certaines données fournies en entrée
d’un module de code que les données qui en sortent ou les actions qui
en découlent sont conformes aux spécifications du module.
• Les tests unitaires ont deux objectifs :
– Couverture de code : tester chaque ligne de code du programme à tester
(boucle, décision, appel de méthode, etc.).
31/05/2022 247
Les différents types de tests : Les tests
unitaires
– Couverture de données: tester la réponse du programme avec des données
valides ou invalides, peu ou trop de données, etc.
• Les tests unitaires sont généralement écrits par les développeurs eux-
mêmes pour la validation de leurs codes.
• Les entrées du test sont définies à partir de l’analyse du code source du
programme.
• Les tests unitaires sont des tests en boite blanche.
31/05/2022 248
Les différents types de tests : Les tests
d’intégration
• Intégration: c'est le fait d'assembler plusieurs composants logiciels
élémentaires pour réaliser un composant de plus haut niveau.
• intégration continue: consiste à rendre automatique l'intégration des
différents composants d'un système dès que ces composants sont
modifiés, pour faire en sorte que les effets produits par ces
modifications soient rapidement mesurables.
• Les tests d'intégration visent à s'assurer du bon fonctionnement de la
mise en œuvre conjointe de plusieurs unités de programme, testées
unitairement au préalable.
31/05/2022 249
Les différents types de tests : Les tests
d’intégration
• Les tests d'intégration visent à s'assurer aussi que le produit est
compatible avec l’environnement d’exécution du logiciel.
• Les tests d'intégration sont des tests en boite blanche.
31/05/2022 250
Les différents types de tests : Les tests
fonctionnels
• Les tests fonctionnels ont pour objectif de valider la conformité des
comportements du logiciel par rapport aux spécifications.
• Ils sont basés sur les spécifications, qui déterminent le comportement
attendu.
• Ils sont conduits dans un contexte le plus proche possible de l’utilisation
réelle du logiciel.
• Ils permettent de réaliser les principales tâches pour lesquelles a été
conçu et développé le logiciel.
• Ils permettent de détecter les erreurs de conception afin de les corriger
par la suite.
31/05/2022 251
Les différents types de tests : Les tests
fonctionnels
• Depuis les spécifications nous pouvons définir les données du test.
• Depuis les spécifications nous pouvons prédire les résultats de test.
• En passant ces données de test dans le programme à tester, nous
pouvons comparer les résultats d’exécution avec les résultats prédis.
• Les tests fonctionnels sont des tests en boite noir.
31/05/2022 252
Les différents types de tests : Les tests de
charge
• Les tests de charge ont pour objectif de mesurer les réponses d’un
système soumis à un volume d’utilisateurs accru pour en vérifier la
capacité à soutenir le trafic attendu. Ils se déclinent dans 4 catégories.
• Les tests de charge « classiques » qui servent en général à vérifier que le
système peut tenir des temps de réponse cibles pour un volume
d’utilisateurs donné.
• Les tests de résistance au stress qui s’intéressent au comportement du
système face à des conditions extrêmes après avoir atteint une exigence
cible, telle que définie par le test de charge.
31/05/2022 253
Les différents types de tests : Les tests de
charge
• Les tests de capacité. Il s’agit d’un type spécifique de test de résistance
au stress, qui aide à identifier le nombre maximal d’utilisateurs gérable
par le système.
• Les tests d’endurance qui examine le comportement du système lors
d’une exécution sur la durée (par exemple, sur plusieurs jours) après
avoir atteint ses exigences cibles, telles que définies par le test de
charge.
• les résultats d’un test de charge sont fluctuants et ouverts à
interprétation.
31/05/2022 254
Les différents types de tests : Les outils de
test
31/05/2022 255
L’automatisation des tests : Le test manuel
31/05/2022 256
L’automatisation des tests : Le test
automatisé
• Assuré par des outils qui déchargent le testeur de:
– Génération des cas de tests.
– Du lancement des tests.
– De l'enregistrement des résultats.
• Un gain en temps et un gain en productivité.
31/05/2022 257
L’automatisation des tests : Les bénéfices
de l’automatisation
• Meilleure couverture de l’application :
– Exécution de plus de tests automatiques que manuels en un même intervalle de
temps.
– Minimiser les problèmes de non régression. Focalisation des tests manuels sur
les nouvelles fonctionnalités.
• Meilleure fiabilité de l’application :
– Meilleure couverture.
– Stabilité du produit.
– Résultat rigoureux.
– Pas d’intervention humaine lors de l’exécution du test.
31/05/2022 258
L’automatisation des tests : Les bénéfices
de l’automatisation
• Diminution des coûts du développement:
– Les défauts découverts plus précocement coûtent moins cher à corriger.
• Gain de temps:
– Exécution rapide.
– Détection rapide des problèmes.
– Concentration sur l’analyse du problème.
– Accélérer la mise en production des évolutions dans des situations très
compétitives.
• Réduction du temps consacré au test :
– Le temps d'exécution en automatique est généralement plus court.
31/05/2022 259
L’automatisation des tests : Les limites de
l’automatisation
• Coût de la mise en place important :
– La mise en place est assez coûteuse.
– Il est plus facile d’écrire un test manuel qu’un test automatique.
– Le ROI est assuré avec la répétition des tests.
• Plus adaptée à des logiciels de grosse taille avec une activité de tests
répétitive.
• Contrainte sur l’écriture du test :
– Les données de test doivent être établies le plus rigoureusement possible.
– Les coûts de maintenance sont vite élevés si les scénarios de tests changent
souvent.
31/05/2022 260
L’automatisation des tests : Les limites de
l’automatisation
Essayer de couvrir le code source à 100% peut se révéler inefficace et très coûteux.
• La mise en place de l’automatisation nécessite :
– Une expertise technique en la matière.
– Des outils, soumis à un coût de licence pour certains.
– Du temps, de l’effort et du budget.
• L’automatisation n’est pas une baguette magique qui permettra de
produire un logiciel 0 anomalie !
• “Testing can only reveal the presence of errors but never their absence”
– Dijkstra (Notes on Structured Programming, 1972).
31/05/2022 261
L’automatisation des tests : Choisir les
tests à automatiser
• Il faut trouver le bon équilibre entre :
– Couverture de test.
– Granularité des tests.
– La maintenabilité des tests.
• La mise en place des tests automatisés doit être la moins compliquée et
la plus performante possible.
31/05/2022 262
L’automatisation des tests : Choisir les
tests à automatiser
• Les tests répétitifs :
– Un critère majeur pour décider si un test doit être automatisé.
– Le coût de la mise en place de l’automatisation est amorti sur le nombre
d’exécution du test.
– Convient pour des projets où des tests de non régression sont joués d’une
manière récurrente.
• Les tests fastidieux qui réclament une attention soutenue de l'opérateur.
• Les tests qui nécessitent une instrumentation complexe.
• Les tests de longue durée, de stabilité et de fiabilité.
• Les tests de contrôle des temps de réponse.
31/05/2022 263
L’automatisation des tests : Choisir les
tests à automatiser
• Les tests qui ne sont pas possibles autrement.
• Ne convient pas pour des projets :
– De petite taille.
– De courte durée.
– Des changements mineurs.
31/05/2022 264
Les environnements de test :
Environnement d’intégration
• Environnement dans lequel les différents composants du logiciel sont
mis en relation entre eux et également avec les autres logiciels en
amont et en aval pour un test complet de la solution globale.
• Les tests effectués dans cet environnement sont généralement des tests
de communication entre les différents composants de la solution.
31/05/2022 265
Les environnements de test :
Environnement de recette
• La recette est une phase de développement des projets, visant à assurer
formellement que le produit est conforme aux spécifications techniques
et fonctionnelles.
• La recette technique permet de contrôler les caractéristiques
techniques du produit livré.
• La recette fonctionnelle a pour but la validation des fonctionnalités
exprimées dans le cahier des charges et détaillées dans les
spécifications fonctionnelles.
• L’environnement de recette est l'environnement qui permet de dérouler
les tests de validation technique et fonctionnelle du produit.
31/05/2022 266
Les environnements de test : Environnement
de test d’acceptation utilisateur
• Les tests d'acceptation utilisateur (UAT) constituent la dernière phase du
processus de test logiciel.
• Au cours de l'UAT, les utilisateurs finaux du produit testent le logiciel
pour s'assurer qu'il puisse gérer les tâches requises dans des scénarios
réels, selon les spécifications.
• L’UAT est l'une des procédures qui doit avoir lieu avant que le logiciel
nouvellement développé soit déployé en production.
• L'UAT est également connu sous le nom de test bêta, test d'application
ou test d'utilisateur final.
31/05/2022 267
Les environnements de test : Environnement
de test d’acceptation utilisateur
• L’UAT implique directement les utilisateurs prévus du logiciel. L'UAT peut
être mis en œuvre en rendant un logiciel disponible pour un essai de
bêta gratuit sur Internet ou par le biais d'une équipe de test interne
composée d'utilisateurs de logiciels réels.
• L'UAT est important car il permet de démontrer que le logiciel
fonctionne de manière adaptée aux circonstances et à l'utilisation
réelles.
• L’environnement UAT est très proche de la production.
31/05/2022 268
Configuration des rapports de tests
31/05/2022 269
Configuration des rapports de tests
• La configuration des goals Maven est proposée via la vue «Nom de Job
> Configuration » accessible depuis le tableau de bord Jenkins.
31/05/2022 270
Configuration des rapports de tests
31/05/2022 271
Consultation des rapports de tests
31/05/2022 272
Consultation des rapports de tests
31/05/2022 273
Consultation des rapports de tests
31/05/2022 274
Consultation des rapports de tests
31/05/2022 275
Consultation des rapports de tests
31/05/2022 276
Consultation des rapports de tests
31/05/2022 277
Consultation des rapports de tests
31/05/2022 278
Consultation des rapports de tests
31/05/2022 279
Sommaire
31/05/2022 280
GESTION DE LA QUALITÉ DU CODE
31/05/2022 281
GESTION DE LA QUALITÉ DU CODE
• Agenda
– La mise en place des métriques
– Les outils d’analyse et de reporting (Checkstyle, Findbugs, PMD, tec.)
– La génération de rapports d’analyses
– La publication des résultats dans Jenkins
– Configuration de SonarQube
– La publication des résultats dans SonarQube
31/05/2022 282
La mise en place des métriques : Qualité
logicielle
• Selon Wikipedia : « La gestion de la qualité regroupe les techniques et
organisations concourant à rendre conforme à un standard la
production de biens ou de services ».
• L’ANSI définit la qualité comme « l'ensemble des attributs et
caractéristiques d'un produit ou d'un service qui portent sur sa capacité
à satisfaire des besoins donnés ».
• Dans le monde informatique en général, la qualité d’une solution
logicielle est directement liée à la qualité du code lui-même.
31/05/2022 283
La mise en place des métriques : Qualité
logicielle
• 6 indicateurs de qualité logicielle (Norme ISO 9126) :
– Fonctionnalités, la réponse aux exigences et besoins des utilisateurs.
– Utilisabilité, l’effort nécessaire pour l’appropriation de la solution.
– Fiabilité , capacité de rendre des résultats corrects en toute circonstance.
– Efficacité, le ratio entre les ressources utilisées et les résultats délivrés.
– Maintenabilité, l’effort nécessaire à la correction de la solution.
– Portabilité, la capacité à fonctionner dans différents environnements.
31/05/2022 284
La mise en place des métriques :
Facteurs & critères de qualité
31/05/2022 285
La mise en place des métriques :
Evaluation de la Qualité
Facteur Critère Attribut
mesurable
Taille des programmes
Lisibilité du code
• L’évaluation de la qualité Facilité d’Analyse
Auto-description
consiste à définir les attributs
…
mesurables de chaque critère Expressions et aspects
de qualité identifié : Facilité de
Modification
OO
Maintenabilité Flot de contrôle
31/05/2022 286
La mise en place des métriques :
Métrologie
• L’évaluation de la qualité s’appuie sur des éléments de Métrologie
adaptés à chaque attribut mesurable.
• La Métrologie doit:
– Définir l’ensemble des caractéristiques mesurables du logiciel.
– Définir les méthodes et les outils d'évaluation.
– Evaluer le logiciel par la mise en œuvre de ces méthodes et de ces outils.
• La métrologie porte sur :
– La qualité du processus de développement.
– La qualité du service.
– La qualité intrinsèque du logiciel.
31/05/2022 287
La mise en place des métriques : Les
Métriques
• Exemple de métriques :
Facteur Critère Attribut Métrique
mesurable
Taille des programmes Nombre de lignes
de code
Lisibilité du code % de code mort
Facilité d’Analyse
Auto-description % de lignes de
commentaires
…
Respect des normes
31/05/2022 288
La mise en place des métriques : La qualité
du code
• Un des volets impactant la qualité de la solution logicielle est la qualité
du code source composant la solution.
• La qualité du code source est évaluée sur la base de métriques associées
aux critères identifiés dans le cadre de la démarche de qualité.
• L’évaluation est régulière, les résultats de l’évaluation sont publiés, et
des actions correctives sont mises en œuvre.
31/05/2022 289
La mise en place des métriques :
Les métriques du code Java
• L’évaluation de la qualité du code Java s’appuie sur un certain nombre
de métriques, calculées sur l’analyse statique du code source :
– La taille des éléments du projet :
• Le nombre de lignes dans un fichier source.
• Le nombre de classes dans un package.
• Le nombre de méthodes dans une classe.
• Le nombre de paramètres pour une méthode.
– La lisibilité des éléments du projet :
• Le nombre de lignes pour une méthode.
• L’organisation, l’indentation, la documentation des lignes de code.
31/05/2022 290
La mise en place des métriques :
Les métriques du code Java
– L’architecture du projet :
• Le découpage en packages.
• Les dépendances entre packages.
• Le respect des couches logicielles.
– Le nombre et l’étendue des tests unitaires.
31/05/2022 291
Les outils d’analyse et de reporting
31/05/2022 292
Les outils d’analyse et de reporting
– FindBugs
• Prends en charge la détection des principaux patterns de programmation pouvant conduire à
l’apparition de bugs (anomalie, sécurité, performances, …).
– JDepend ++
• Prend en charge le contrôle des dépendances entre les packages et les classes.
• Fait ressortir les cycles et le non respect des conventions d’architecture.
– JUnit & Cobertura
• Pour jouer les tests unitaires et mesurer la couverture de ces mêmes tests unitaires.
• Permet de détecter les parties du code qui ne sont pas testées.
31/05/2022 293
La génération de rapports d’analyse
• La génération des rapports d’analyse de code est assurée par les outils
d’analyse intégrés dans Jenkins via des plugins appropriés.
• Jdepend est un plugin qui peut être installé à part
• Un plugin viens remplacer les anciens plugins des outils d’analyse de
code tel que Checkstyle, PMD, FindBugs, etc, c’est le plugin « warning
next generation »
• Il est disponible via le gestionnaire de plugins dans la vue « Administrer
Jenkins > Gestion des plugins » dans l’onglet Disponible.
31/05/2022 294
Rapports d’analyse : Plugin warning next
generation
31/05/2022 295
Rapports d’analyse Checkstyle : à partir du
Plugin warning next generation
31/05/2022 296
Rapports d’analyse PMD : à partir du
Plugin warning next generation
31/05/2022 297
Rapports d’analyse FindBugs : à partir du
Plugin warning next generation
31/05/2022 298
La génération de rapports d’analyse :
Installation du plugin JDepend
31/05/2022 299
La génération de rapports d’analyse
31/05/2022 300
La génération de rapports d’analyse :
Configuration de la construction
• Pour configurer la génération des rapports d’analyse du code lors de la
construction du projet, aller dans vue de la configuration du Job de la
construction « NOM_JOB > Configurer ».
• Dans la section « Configuration du build »,
– Dans la section « build », ajouter les Goals et options :
• clean install checkstyle:checkstyle pmd:pmd findbugs:findbugs
– Dans la section « Actions à la suite du build », ajouter l’action:
• Record compiler warnings and static analysis results
– Choisissez les options : PMD, Checkstyle et Findbugs
• Report Jdepend.
31/05/2022 301
La génération de rapports d’analyse :
Configuration de la construction
31/05/2022 302
La génération de rapports d’analyse :
Configuration de la construction
31/05/2022 303
La publication des résultats dans Jenkins
31/05/2022 304
La publication des résultats dans Jenkins :
Les tendances
31/05/2022 305
La publication des résultats dans Jenkins :
Les résultats de Checkstyle
31/05/2022 306
La publication des résultats dans Jenkins : Les
résultats de PMD
31/05/2022 307
La publication des résultats dans Jenkins :
Les résultats de JDepend
31/05/2022 308
Le serveur SonarQube
• Outil open source soutenu par une forte communauté très active.
• Fournit un composant global et centralisé de gestion et contrôle de la
qualité.
• Regroupe l’ensemble des outils de contrôle qualité : Checkstyle,
PDM/CPD, FindBugs, Jdepend, Junit & Cobertura.
• Fournit une interface d’administration et de configuration centralisée.
• Permet la définition de profils qualités différents par projet.
• Permet la gestion des habilitations par utilisateurs et groupes.
31/05/2022 309
Le serveur SonarQube
31/05/2022 310
LABS
31/05/2022 312
Configuration de SonarQube :
Installation du plugin SonarQube Scanner
31/05/2022 313
Configuration de SonarQube :
Installation du plugin SonarQube Scanner
31/05/2022 314
Configuration de SonarQube
31/05/2022 315
Configuration de SonarQube
31/05/2022 316
Configuration de SonarQube
31/05/2022 317
Configuration de SonarQube :
Configuration du plugin SonarQube Scanner
31/05/2022 318
Configuration de SonarQube :
Configuration du plugin SonarQube Scanner
31/05/2022 319
Configuration de SonarQube :
Configuration du plugin SonarQube Scanner
31/05/2022 320
Configuration de SonarQube :
Configuration du Job d’analyse du code
• La configuration du Job d’analyse du code est accessible depuis le
tableau de bord Jenkins.
• Ajoutez une étape pré-build « Lancer une analyse avec SonarQube
Scanner » dans la configuration du Job d’analyse du code.
31/05/2022 321
Configuration de SonarQube :
Configuration du Job d’analyse du code
31/05/2022 322
Publication des résultats dans SonarQube
31/05/2022 323
Publication des résultats dans SonarQube
31/05/2022 324
Publication des résultats dans SonarQube
• Le tableau de bord
31/05/2022 325
Publication des résultats dans SonarQube :
Les problèmes détectés
31/05/2022 326
Publication des résultats dans SonarQube :
Les statistiques
31/05/2022 327
LABS