wordcamp lyon 2015 - wordpress, git et l'intégration continue
TRANSCRIPT
QUI SUIS-JE ?CONSULTANT TECHNIQUE WEB
Développements spécifiques, création de site, constitutiond'équipes, accompagnement, méthodes agiles...
Mon crédo, si c'est technique et web, ça m'intéresse
http://chstudio.fr
@s_hulard
http://github.com/shulard
QU'EST-CE QUE C'EST ?Continuous Integration is a software development practice wheremembers of a team integrate their work frequently, usually eachperson integrates at least daily - leading to multiple integrationsper 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 reducedintegration problems and allows a team to develop cohesivesoftware more rapidly.
Martin Flower
À QUOI ÇA SERT ?Se rendre compte de ses erreurs automatiquement
Avoir accès aux derniers développements
Suivre l'évolution du travail en cours
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 AVANTAGESUtilisé 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
C'EST SEULEMENT UN OUTIL !Il faut le comprendre, le connaitre...
S'il n'est pas adapté, il faut en choisir un autre...
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 nemaitrise rien ici...
Un cycle de vie des données (BDD, images) à gérer !
LE CONTRÔLE DE VERSIONSécurisation du code et historique des modifications :
Git - (mon préféré)
Subversion -
https://git-scm.com/
https://subversion.apache.org/
L'AUTOMATISATIONInitialisation du fichier wp-config.php
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 serveurdistant par SSH
Validation du code (PHPLint, Behat/Mink, PHPUnit...)
... MAIS DES SOLUTIONS EXISTENTBeaucoup se sont posés la question, leurexpérience est précieuse !
Des outils sont capables de manipuler :
Un environnement PHP
Git / SVN
MySQL
Configuration du serveur web
UN MODÈLE DE PROJETCré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-project1
LA COMMANDE EST MON AMIELa plupart des outils s'utilisent en ligne decommande.
Il faut apprendre à dompter le terminal,Bash, SSH pour qu'ils deviennent desalliés.
PHING est un système de build basé sur :
Un fichier XML décrit les tâches1
1.
Phing Apache Ant
<project basedir="." default="help"> <target name="env:install" description="Install current environment"> <phingcall target="env:init"></phingcall> <phingcall target="wp:install"></phingcall> </target> <target name="env:wp:update" description="Update local wordpress version instance to the most recent one"> <exec command="cd public/wp-cms && git fetch --tags && git checkout ̀git tag | tail -1̀"></exec> </target> <target name="env:backup" description="Restore backuped date in the current environement"> <phingcall target="db:backup"></phingcall> <phingcall target="wp:uploads:backup"></phingcall> </target> </project>
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
$ bin/wp export $ bin/wp is-installed $ bin/wp install --url="http://monsite.com" --title="un super site !" $ bin/wp post create $ bin/wp rewrite list
COMBINÉS POUR SIMPLIFIER
$ phing env:init -> Générer la configuration $ phing env:install -> Initialser configuration et BDD $ phing db:backup -> Créer un dump de la BDD au format SQL $ phing wp:uploads:restore -> Restaurer une archive des images $ phing sync:execute -> Synchroniser un environnement distant
DÉPENDANCES AVEC COMPOSERQuels outils sont utiles au projet ?
{ "name": "chstudio/wordpress-project", "description": "A sample initialization project for WordPress website", "license": "Apache-2.0", "authors": [ { "name": "Stephane HULARD", "email": "[email protected]" } ], "config": { "bin-dir": "bin" }, "require": {}, "require-dev": { "phing/phing": "2.*", "wp-cli/wp-cli": "0.*" } }
INSTALLATION AVEC COMPOSERUne commande pour les trouver !Une commande pour les amener tous !Et dans un projet les lier...
Le fichier composer.lock doit être versionné!
# En local $ composer install
# En production $ composer install --no-dev --optimize-autoloader --prefer-dist --no-interaction
GIT BRANCHING MODELStructurer et normaliser leflux de développement avecgit:
Développement
Releases
Production
Maintenance
Git Flow
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
GITLABDes 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 :
$ git clone $ composer install --no-dev --optimize-autoloader --prefer-dist --no-interaction $ bin/phing env:install --Dbuild.env=PROD $ bin/phing db:restore --Dbuild.env=PROD $ bin/phing wp:uploads:restore --Dbuild.env=PROD $ bin/phing wp:migrate --Ddomain.previous=http://monsite.dev --Ddomain.previous=http://monsite.com
GITLAB CIPlateforme d'intégration continue gratuite avec
Un build est généré pour chaque commit sur le projet
GitLab
GITLAB CI: UN BUILD ?Un build est une série d'étapes totalement automatisées, quiseront exécutées sur chaque commit.
Il permet de faire tout ce qui est nécessaire :
Tests unitaires et fonctionnels
Validation du code (PHP CodeSniffer par exemple)
Déploiement automatique en cas de succès
Le projet devient autonome...
GITLAB CI: LISTE DES BUILDSVisualisation de l'état de chaque commit
Accès aux statistiques sur le projet
GITLAB CI: LOG D'UN BUILDVisualisation du retour d'exécution des commandes
Utile pour savoir d'où viennent les soucis
UN COUPLE EFFICACEL'intégration native entre les deux plateformes simplifiefortement l'installation...
Les builds peuvent être exécutés n'importe où :Aucune nécessité d'avoir un serveurLancement en local très simple
D'AUTRES SOLUTIONS EXISTENTJenkins:
PHPCI:
Travis CI:
...
Avec de nouvelles contraintes et possibilités !
http://jenkins-ci.org/
https://www.phptesting.org/
https://travis-ci.org/
MERCI POUR VOTRE ATTENTION !DES QUESTIONS ?
http://shulard.github.io/slides/wordcamp-lyon-2015