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

WordCamp Lyon 2015 - WordPress, Git et l'intégr...

WordCamp Lyon 2015 - WordPress, Git et l'intégration continue

Retour d'expérience sur les pratiques que j'utilise au quotidien pour l'industrialisation de mes développements WordPress...

https://lyon.wordcamp.org/2015/session/wordpress-git-et-lintegration-continue/

Stéphane HULARD

June 05, 2015
Tweet

More Decks by Stéphane HULARD

Other Decks in Programming

Transcript

  1. QUI SUIS-JE ? CONSULTANT TECHNIQUE WEB Développements spécifiques, création de

    site, constitution d'équipes, accompagnement, méthodes agiles... Mon crédo, si c'est technique et web, ça m'intéresse    http://chstudio.fr [email protected]   @s_hulard http://github.com/shulard
  2. QU'EST-CE QUE C'EST ? Continuous Integration is a software development

    practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly. Martin Flower
  3. À QUOI ÇA SERT ? Se rendre compte de ses

    erreurs automatiquement Avoir accès aux derniers développements Suivre l'évolution du travail en cours
  4. POUR QUI ? Les grandes équipes Les utilisateurs des méthodes

    agiles Les gros projets Mais pas que...
  5. VRAIMENT, MAIS POURQUOI ? J'entends tout le temps : WordPress

    c'est juste pour faire des blogs ! WordPress c'est mal codé ! WordPress c'est pas fait pour les devs ! Alors, pourquoi autant de sites l'utilisent ?
  6. IL A SES AVANTAGES Utilisé sur plus de 23% des

    sites web Une interface claire, et très intuitive Facile à mettre en place Très bien documenté Une importante communauté Une modularité incroyable
  7. C'EST SEULEMENT UN OUTIL ! Il faut le comprendre, le

    connaitre... S'il n'est pas adapté, il faut en choisir un autre...
  8. QUELLES CONTRAINTES ? Différents environnements avec différentes configurations : Développement

    en local, ici tout et possible! Production sur serveur client (mutualisé, dédié, ...) on ne maitrise rien ici... Un cycle de vie des données (BDD, images) à gérer !
  9. LE CONTRÔLE DE VERSION Sécurisation du code et historique des

    modifications : Git - (mon préféré) Subversion - https://git-scm.com/ https://subversion.apache.org/
  10. L'AUTOMATISATION Initialisation du fichier w p - c o n

    f i g . p h p Initialisation de la base de données Sauvegarde / Restauration des contenus (images et BDD) Gestion des différents environnements (dev, préprod, prod) Objectif: Simplifier les tâches critiques et automatiser !
  11. DES BESOINS COMPLIQUÉS ... Versionning, tag, branches Imports SQL en

    ligne de commande RSync: Synchronisation de fichiers vers un serveur distant par SSH Validation du code (PHPLint, Behat/Mink, PHPUnit...)
  12. ... MAIS DES SOLUTIONS EXISTENT Beaucoup se sont posés la

    question, leur expérience est précieuse ! Des outils sont capables de manipuler : Un environnement PHP Git / SVN MySQL Configuration du serveur web
  13. UN MODÈLE DE PROJET Création d'un projet type pour l'intégration

    WordPress : Une structure duplicable très rapidement Versionné sous Git et dispo sur GitHub  https://github.com/CHStudio/wordpress-project 1
  14. LA COMMANDE EST MON AMIE La plupart des outils s'utilisent

    en ligne de commande. Il faut apprendre à dompter le t e r m i n a l , B a s h , S S H pour qu'ils deviennent des alliés.
  15. PHING est un système de build basé sur : Un

    fichier XML décrit les tâches 1 1. Phing Apache Ant < p r o j e c t b a s e d i r = " . " d e f a u l t = " h e l p " > < t a r g e t n a m e = " e n v : i n s t a l l " d e s c r i p t i o n = " I n s t a l l c u r r e n t e n v i r o n m e n t " > < p h i n g c a l l t a r g e t = " e n v : i n i t " > < / p h i n g c a l l > < p h i n g c a l l t a r g e t = " w p : i n s t a l l " > < / p h i n g c a l l > < / t a r g e t > < t a r g e t n a m e = " e n v : w p : u p d a t e " d e s c r i p t i o n = " U p d a t e l o c a l w o r d p r e s s v e r s i o n i n s t a n c e t o t h e m o s t r e c e n t o n e " > < e x e c c o m m a n d = " c d p u b l i c / w p - c m s & & g i t f e t c h - - t a g s & & g i t c h e c k o u t ` g i t t a g | t a i l - 1 ` " > < / e x e c > < / t a r g e t > < t a r g e t n a m e = " e n v : b a c k u p " d e s c r i p t i o n = " R e s t o r e b a c k u p e d d a t e i n t h e c u r r e n t e n v i r o n e m e n t " > < p h i n g c a l l t a r g e t = " d b : b a c k u p " > < / p h i n g c a l l > < p h i n g c a l l t a r g e t = " w p : u p l o a d s : b a c k u p " > < / p h i n g c a l l > < / t a r g e t > < / p r o j e c t > https://github.com/CHStudio/wordpress-project/blob/develop/build.xml
  16. WP-CLI est une série de commandes pour gérer les installations

    WordPress : Ajout d'utilisateurs, gestion des droits Gestion de termes, des posts, des thèmes, des sidebars... Tout ça en ligne de commande  WP-CLI $ b i n / w p e x p o r t $ b i n / w p i s - i n s t a l l e d $ b i n / w p i n s t a l l - - u r l = " h t t p : / / m o n s i t e . c o m " - - t i t l e = " u n s u p e r s i t e ! " $ b i n / w p p o s t c r e a t e $ b i n / w p r e w r i t e l i s t
  17. COMBINÉS POUR SIMPLIFIER $ p h i n g e

    n v : i n i t - > G é n é r e r l a c o n f i g u r a t i o n $ p h i n g e n v : i n s t a l l - > I n i t i a l s e r c o n f i g u r a t i o n e t B D D $ p h i n g d b : b a c k u p - > C r é e r u n d u m p d e l a B D D a u f o r m a t S Q L $ p h i n g w p : u p l o a d s : r e s t o r e - > R e s t a u r e r u n e a r c h i v e d e s i m a g e s $ p h i n g s y n c : e x e c u t e - > S y n c h r o n i s e r u n e n v i r o n n e m e n t d i s t a n t
  18. DÉPENDANCES AVEC COMPOSER Quels outils sont utiles au projet ?

    { " n a m e " : " c h s t u d i o / w o r d p r e s s - p r o j e c t " , " d e s c r i p t i o n " : " A s a m p l e i n i t i a l i z a t i o n p r o j e c t f o r W o r d P r e s s w e b s i t e " , " l i c e n s e " : " A p a c h e - 2 . 0 " , " a u t h o r s " : [ { " n a m e " : " S t e p h a n e H U L A R D " , " e m a i l " : " s . h u l a r d @ c h s t u d i o . f r " } ] , " c o n f i g " : { " b i n - d i r " : " b i n " } , " r e q u i r e " : { } , " r e q u i r e - d e v " : { " p h i n g / p h i n g " : " 2 . * " , " w p - c l i / w p - c l i " : " 0 . * " } }
  19. INSTALLATION AVEC COMPOSER Une commande pour les trouver ! Une

    commande pour les amener tous ! Et dans un projet les lier...  Le fichier c o m p o s e r . l o c k doit être versionné! # E n l o c a l $ c o m p o s e r i n s t a l l # E n p r o d u c t i o n $ c o m p o s e r i n s t a l l - - n o - d e v - - o p t i m i z e - a u t o l o a d e r - - p r e f e r - d i s t - - n o - i n t e r a c t i o n
  20. GIT BRANCHING MODEL Structurer et normaliser le flux de développement

    avec git: Développement Releases Production Maintenance Git Flow
  21. ET HOP DANS LE CLOUD ! pour gérer les dépôts,

    gratuit et avec la possibilité de créer des dépôts privés ! GitLab
  22. GITLAB Des dépôts centralisés et accessibles en HTTP / SSH

    Installation simplifiée et accès sécurisé par clé SSH Gestion des tickets Sauvegarde du code source des projets  Récupérer les sources et installer le projet : $ g i t c l o n e $ c o m p o s e r i n s t a l l - - n o - d e v - - o p t i m i z e - a u t o l o a d e r - - p r e f e r - d i s t - - n o - i n t e r a c t i o n $ b i n / p h i n g e n v : i n s t a l l - - D b u i l d . e n v = P R O D $ b i n / p h i n g d b : r e s t o r e - - D b u i l d . e n v = P R O D $ b i n / p h i n g w p : u p l o a d s : r e s t o r e - - D b u i l d . e n v = P R O D $ b i n / p h i n g w p : m i g r a t e - - D d o m a i n . p r e v i o u s = h t t p : / / m o n s i t e . d e v - - D d o m a i n . p r e v i o u s = h t t p : / / m o n s i t e . c o m
  23. GITLAB CI Plateforme d'intégration continue gratuite avec Un b u

    i l d est généré pour chaque commit sur le projet GitLab
  24. GITLAB CI: UN BUILD ? Un build est une série

    d'étapes totalement automatisées, qui seront exécutées sur chaque commit. Il permet de faire tout ce qui est nécessaire : Tests unitaires et fonctionnels Validation du code (P H P C o d e S n i f f e r par exemple) Déploiement automatique en cas de succès  Le projet devient autonome...
  25. GITLAB CI: LISTE DES BUILDS Visualisation de l'état de chaque

    commit Accès aux statistiques sur le projet
  26. GITLAB CI: LOG D'UN BUILD Visualisation du retour d'exécution des

    commandes Utile pour savoir d'où viennent les soucis
  27. UN COUPLE EFFICACE L'intégration native entre les deux plateformes simplifie

    fortement l'installation... Les builds peuvent être exécutés n'importe où : Aucune nécessité d'avoir un serveur Lancement en local très simple
  28. D'AUTRES SOLUTIONS EXISTENT Jenkins: PHPCI: Travis CI: ... Avec de

    nouvelles contraintes et possibilités ! http://jenkins-ci.org/ https://www.phptesting.org/ https://travis-ci.org/