Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intégration Continue PHP avec Jenkins CI

Hugo Hamon
November 15, 2011

Intégration Continue PHP avec Jenkins CI

Comment assurer le suivi qualite du code source d'une application web? Ce n'est pas une tache aisée ! C’est d’autant plus vrai que PHP est encore considéré aujourd'hui comme un langage peu professionnel. PHP est pourtant un langage dont l'outillage n'a rien a envier a l'ensemble de ses concurrents. L'objectif de cette conférence est de présenter les bonnes pratiques à adopter ainsi que les différents outils a mettre en oeuvre afin de contrôler la qualité d'un projet PHP au quotidien. Un focus particulier sera porté sur la plateforme d'intégration continue Jenkins, les tests unitaires ou bien encore la récupération et l'interprétation des métriques collectées.

Hugo Hamon

November 15, 2011
Tweet

More Decks by Hugo Hamon

Other Decks in Technology

Transcript

  1. Comment surveiller la
    qualité de vos projets PHP
    au quotidien ?

    View full-size slide

  2. « 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 » Wikipedia

    View full-size slide

  3. Quels avantages ?

    View full-size slide

  4. Quelles pratiques au
    quotidien ?

    View full-size slide

  5. 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

    View full-size slide

  6. Alice
    Bob
    Carlos
    SCM Server
    CI Server
    Build
    Successful

    View full-size slide

  7. Alice
    Bob
    Carlos
    SCM Server
    CI Server
    Build Failed
    Alerter l’équipe

    View full-size slide

  8. Alice
    Bob
    Carlos
    SCM Server
    CI Server
    Build
    Successful

    View full-size slide

  9. Quelles PIC sur le
    marché ?

    View full-size slide

  10. Mettre en œuvre
    une PIC pour PHP

    View full-size slide

  11. 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)

    View full-size slide

  12. q 
    Hudson rebaptisé Jenkins en février 2011
    q 
    Ecrit en Java
    q 
    Exécute des tâches Ant, Maven, Shell et Windows
    q 
    +300 plugins
    q 
    Analyse des rapports de compilation
    q 
    Génération de statistiques et de graphiques (métriques)

    View full-size slide

  13. http://jenkins-ci.org

    View full-size slide

  14. $ java –jar jenkins.war

    View full-size slide

  15. http://localhost:8080

    View full-size slide

  16. q 
    XDebug
    q 
    PDepend
    q 
    PHP Mess Detector
    q 
    PHP CodeSniffer
    q 
    PHPUnit 3.6.x
    q 
    PHPCPD
    q 
    PHP Documentor
    q 
    PHP CodeBrowser

    View full-size slide

  17. $ pecl install xdebug
    $ pear channel-discover pear.pdepend.org
    $ pear channel-discover pear.phpmd.org
    $ pear channel-discover pear.phpunit.de
    $ pear channel-discover components.ez.no
    $ pear channel-discover pear.symfony-project.com
    $ pear channel-discover pear.phing.info
    $ pear install phing/phing
    $ pear install pdepend/PHP_Depend-beta
    $ pear install phpmd/PHP_PMD-alpha
    $ pear install phpunit/phpcpd
    $ pear install PHPDocumentor
    $ pear install PHP_CodeSniffer
    $ pear install --alldeps phpunit/PHP_CodeBrowser-alpha
    $ pear install --alldeps phpunit/PHPUnit

    View full-size slide

  18. Plugins Jenkins

    View full-size slide

  19. q 
    Subversion
    q 
    Git
    q 
    Checkstyle
    q 
    Dry
    q 
    HTML Publisher
    q 
    Green Balls
    q 
    JDepend
    q 
    PMD
    q 
    Violations
    q 
    xUnit
    q 
    Clover

    View full-size slide

  20. Démarrer un projet

    View full-size slide

  21. Projet free-style

    View full-size slide

  22. Con guration du projet

    View full-size slide

  23. Con guration du dépôt Subversion

    View full-size slide

  24. Dé nition des droits d’accès au SVN

    View full-size slide

  25. Con guration du dépôt Git

    View full-size slide

  26. Con guration des builds

    View full-size slide

  27. Exécution et contrôle du build

    View full-size slide

  28. Exécution et contrôle du build

    View full-size slide

  29. q 
    Phing est un portage de Ant en PHP
    q 
    Outil d’automatisation de tâches
    q 
    Phing exécute des tâches à la suite
    q 
    Les tâches sont décrites dans un chier build.xml
    q 
    Supporte les dépendances entre les tâches
    q 
    Tâches prédé nies pour PHPUnit, Code Sniffer, PMD…

    View full-size slide

  30. phing –f $WORKSPACE/build.xml build –Dws=$WORKSPACE

    View full-size slide

  31. PHPUnit
    http://phpunit.de/

    View full-size slide

  32. q 
    Exécuter les tests unitaires
    q 
    Générer un rapport JUnit
    q 
    Générer un rapport Clover XML
    q 
    Générer un rapport de couverture HTML

    View full-size slide


  33. colors="true" convertErrorsToExceptions="true"
    convertNoticesToExceptions="true" convertWarningsToExceptions="true"
    processIsolation="true" stopOnFailure="false"
    syntaxCheck="false" bootstrap="src/autoload.php">


    ./tests/Syndication/




    ./src/Syndication/



    View full-size slide




  34. description="Building the project">


    description="Running unit tests and coverage analysis">
    />


    View full-size slide

  35. Con gurer la suite de tests unitaires

    View full-size slide

  36. Con gurer la couverture de code

    View full-size slide

  37. Analyse de la couverture de code

    View full-size slide

  38. Analyse des rapports de tests unitaires

    View full-size slide

  39. Analyse des rapports de tests unitaires

    View full-size slide

  40. Publication de la couverture de code

    View full-size slide

  41. Publication de la couverture de code

    View full-size slide

  42. PHPDocumentor
    http://www.phpdoc.org/

    View full-size slide

  43. Générer la documentation d’API

    View full-size slide








  44. destdir="${builddir}/docs" sourcecode="true"
    parseprivate="true" output="HTML:Smarty:PHP">






    View full-size slide

  45. Publication de la documentation d’API

    View full-size slide

  46. Publication de la documentation d’API

    View full-size slide

  47. PHPCPD
    Copy Paste Detector
    https://github.com/sebastianbergmann/phpcpd

    View full-size slide

  48. Rechercher les duplications de code

    View full-size slide

  49. 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.

    View full-size slide

  50. PHP Depend
    http://pdepend.org/

    View full-size slide

  51. q 
    Complexité cyclomatique
    q 
    Qualité globale du code
    q 
    Nombre de classes / méthodes / fonctions / interfaces
    q 
    Nombre d’appels d’une méthode
    q 
    Nombre de propriétés / méthodes publiques vs privées
    q 
    Nombre de lignes de code en commentaires….
    Analyse statique du code

    View full-size slide

  52. Analyse statique du code
    build/logs/jdepend.xml

    View full-size slide

  53. PHP Mess Detector
    http://phpmd.org/

    View full-size slide

  54. q 
    PHP Mess Detector est un portage en PHP de PMD (Java)
    q 
    Recherche de bugs potentiels
    q 
    Recherche de code mort (ie: méthodes non appelées)
    q 
    Code non optimisé
    q 
    Expressions trop complexes…
    Analyse statique du code

    View full-size slide

  55. PHP Code Sniffer
    http://pear.php.net/manual/en/package.php.php-codesniffer.php

    View full-size slide

  56. q 
    Analyse des violations de codage
    q 
    Nombreuses règles par défaut
    q 
    Standards prédé nis : PEAR, Zend, Squiz, PHPCS…
    q 
    Possibilité d’ajouter des règles supplémentaires

    View full-size slide

  57. $ # 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
    Installation du standard Symfony2

    View full-size slide

  58. Installation du standard Symfony2
    build/logs/checkstyle.xml

    View full-size slide












  59. escape="false" />


    View full-size slide

  60. PHP Code Browser
    https://github.com/mayflower/PHP_CodeBrowser

    View full-size slide

  61. build/browser

    View full-size slide

  62. Prévenir plutôt que
    guérir!

    View full-size slide

  63. q 
    Emails
    q 
    Twitter
    q 
    Jabber
    q 
    RSS
    q 
    SMS
    q 

    View full-size slide

  64. Comment industrialiser la PIC
    d’un projet PHP dans Jenkins ?

    View full-size slide

  65. http://jenkins-php.org/

    View full-size slide

  66. Aller plus loin avec Jenkins

    View full-size slide

  67. q 
    Générer des archives PHAR, PEAR, TAR ou ZIP
    q 
    Automatiser le déploiement des builds stables
    q 
    Faciliter les audits de code
    q 
    Intégration avec un bug tracker (Trac, Redmine, Jira)
    q 
    Exécution de tests Sélénium / Fitness
    q 

    View full-size slide

  68. Ques%ons?  
    92-98, boulevard Victor Hugo
    92 115 Clichy Cedex
    [email protected] (+33 (0)1 40 99 82 11)
    sensiolabs.com - symfony.com – trainings.sensiolabs.com

    View full-size slide