Slide 1

Slide 1 text

WORDPRESS, GIT ET L'INTÉGRATION CONTINUE Retour d'expérience et outils... WordCamp Lyon / 5 juin 2015

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

PENDANT CETTE SESSION... 1. L'intégration continue 2. Avec WordPress 3. Méthodes et outils

Slide 4

Slide 4 text

L'INTÉGRATION CONTINUE

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

À QUOI ÇA SERT ? Se rendre compte de ses erreurs automatiquement Avoir accès aux derniers développements Suivre l'évolution du travail en cours

Slide 7

Slide 7 text

BÉNÉFICES Fiabilisation des développements Automatisation des tâches récurentes Gain de temps

Slide 8

Slide 8 text

POUR QUI ? Les grandes équipes Les utilisateurs des méthodes agiles Les gros projets Mais pas que...

Slide 9

Slide 9 text

AVEC WORDPRESS

Slide 10

Slide 10 text

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 ?

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

C'EST SEULEMENT UN OUTIL ! Il faut le comprendre, le connaitre... S'il n'est pas adapté, il faut en choisir un autre...

Slide 13

Slide 13 text

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 !

Slide 14

Slide 14 text

MÉTHODES ET OUTILS

Slide 15

Slide 15 text

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/

Slide 16

Slide 16 text

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 !

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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.

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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 . * " } }

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

GIT BRANCHING MODEL Structurer et normaliser le flux de développement avec git: Développement Releases Production Maintenance Git Flow

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

GITLAB CI: LISTE DES BUILDS Visualisation de l'état de chaque commit Accès aux statistiques sur le projet

Slide 32

Slide 32 text

GITLAB CI: LOG D'UN BUILD Visualisation du retour d'exécution des commandes Utile pour savoir d'où viennent les soucis

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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/

Slide 35

Slide 35 text

MERCI POUR VOTRE ATTENTION ! DES QUESTIONS ? http://shulard.github.io/slides/wordcamp-lyon-2015