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
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
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 ?
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
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 !
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/
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 !
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...)
... 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
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
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.
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
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
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
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 . * " } }
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
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
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...
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
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/