2. Qui suis-je ?
v Hugo HAMON (@hhamon)
v Responsable des formations
v Secrétaire de l’AFUP (2010)
v Contributeur au projet Symfony
v Coauteur & contributeur à des ouvrages Eyrolles
3. Introduction…
« L'intégration continue est un ensemble de
pratiques qui consistent à véri er à chaque
changement du code source que le résultat des
modi cations ne produit pas de régression de
l'application en cours de développement »
7. Avantages…
…a n d’obtenir des versions stables et
déployables le plus souvent possible.
8. Pratiques quotidiennes…
q Maintenir un dépôt unique de code versionné
q Tous les développeurs committent quotidiennement
q Automatiser les compilations (builds)
q Tout commit doit compiler le tronc du code versionné
q Maintenir une compilation courte en permanence
q Rendre disponible le résultat du build à tout le monde
q Automatiser le déploiement
12. Intégration Continue PHP
q Exécution de la suite de tests unitaires (PHPUnit)
q Génération du rapport de couverture de code (PHPUnit)
q Génération de la documentation d’API (PHPDocumentor)
q Génération du rapport des dépendances (PDepend)
q Analyse statique du code source (PMD)
q Détection des violations de codage (PHP_CodeSniffer)
q Détection du code dupliqué (PHPCPD)
q Génération du navigateur de code (PHP Code Browser)
13. Marché de l’Intégration Continue
¨ Maven (Java, Open Source)
¨ CruiseControl (Java, Open Source)
¨ Bamboo (Java, Commercial)
¨ Jenkins (Java, Open Source)
¨ Sonar (Java, Open Source)
¨ Xinc (PHP, Open Source)
14. Jenkins CI
¨ Hudson rebaptisé Jenkins en février 2011
¨ Ecrit en Java
¨ Exécute des tâches Ant, Maven, Shell et Windows
¨ +300 plugins
¨ Analyse des rapports de compilation
¨ Génération de statistiques et de graphiques (métriques)
21. Installer les plugins Jenkins
¨ Subversion pour l’intégration des dépôts SVN
¨ Git pour l’intégration des dépôts Git
¨ Checkstyle pour l’analyse des rapports PHP_CodeSniffer
¨ Dry pour l’analyser des rapports PHPCPD
¨ HTML Publisher pour la publication des logs de couverture de code
¨ Green Balls pour avoir des billes vertes au lieu des bleues J
22. Installer les plugins Jenkins
¨ JDepend pour l’analyse des rapports PHP_Depend
¨ PMD pour le traitement des rapports PHP Mess Detector
¨ Violations pour le traitement de rapports variés
¨ xUnit pour le traitement des logs de tests PHPUnit
¨ Clover pour le traitement des logs de couverture de code de PHPUnit
28. Configuration du dépôt Git
URL du dépôt de code
Git
Branche à construire
Navigateur de
code source
29. Configuration du déclenchement
¨ Le build est déclenché toutes les 5 minutes.
¨ Un nouveau build est déclenché si des commits ont eu lieu
Syntaxe de crontab
33. Configuration de Phing
¨ Phing est un portage de Ant en PHP
¨ Outil d’automatisation de tâches
¨ Phing exécute des tâches à la suite
¨ Les tâches sont décrites dans un chier build.xml
¨ Supporte les dépendances entre les tâches
¨ Tâches prédé nies pour PHPUnit, Code Sniffer, PMD…
37. Configurer la suite de tests unitaires
¨ Con gurer et exécuter la suite de tests unitaires
¨ Génération du rapport de la suite au format JUnit
¨ Génération du rapport XML de couverture de code (Clover)
¨ Génération du rapport HTML de couverture de code
57. Rechercher les duplications de code
Ce graphique montre que le
code dupliqué a bien été
retiré dans le nouveau
commit qui a donné lieu au
dernier build.
Le graphique ci-contre
montre l’évolution du nombre
de tests unitaires réussis au
dernier build.
59. Déterminer les dépendances
¨ PDepend est un portage en PHP de JDepend (Java)
¨ Analyse statistique du code
n Complexité cyclomatique
n Qualité globale du code
n Nombre de classes / méthodes / fonctions / interfaces
n Nombre d’appels d’une méthode
n Nombre de propriétés / méthodes publiques vs privées
n Nombre de lignes de code en commentaires….
63. Analyse statistique du code
¨ PHP Mess Detector est un portage en PHP de PMD (Java)
¨ Analyse statistique du code
¨ Recherche de bugs potentiels
¨ Recherche de code mort (méthodes non appelées par exemple)
¨ Code non optimisé
¨ Expressions trop complexes…
68. Analyser les violations de codage
¨ Analyse des conventions de codage avec PHP_CodeSniffer
¨ PHPCS « sniffs » le code à la recherche de violations de règles
¨ Nombreuses règles par défaut
¨ Standards prédé nis : PEAR, Zend, Squiz, PHPCS…
¨ Possibilité d’ajouter des règles et standards supplémentaires
69. Installation du standard Symfony2
$ # Looking for the PEAR PHP directory
$ pear config-show | grep php_dir
$ # Move to the CodeSniffer standards folder
$ cd /path/to/pear/PHP/CodeSniffer/Standards
$ # Checkout the Symfony2 CodeSniffer standard from Github
$ git clone git://github.com/opensky/Symfony2-coding-standard.git Symfony2
$ # Eventually, set Symfony2 as your default CodeSniffer standard
$ phpcs --config-set default_standard Symfony2
80. Alerter l’équipe par e-mail
¨ Saisie des adresses email des équipiers du projet
¨ Possibilité d’alerter les responsables d’un build en échec
81. Industrialisation
Industrialiser l’intégration continue
d’un projet PHP dans Jenkins ?
82. Industrialiser l’intégration d’un projet
¨ Réutilisation d’un template de projet Jenkins
¨ Dites merci à Sebastian Bergmann !
¨ « PHP Jenkins Template » project
https://github.com/sebastianbergmann/php-jenkins-template
84. Aller plus loin…
¨ Générer des archives PHAR, PEAR, TAR ou ZIP
¨ Automatiser le déploiement des builds stables
¨ Faciliter les audits de code
¨ Intégration avec un bug tracker (Trac, Redmine, Jira)
¨ Exécution de tests Sélénium / Fitness