wordcamp lyon 2015 - wordpress, git et l'intégration continue

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

Upload: stephane-hulard

Post on 07-Aug-2015

1.428 views

Category:

Technology


1 download

TRANSCRIPT

WORDPRESS, GIT ET L'INTÉGRATIONCONTINUE

Retour d'expérience et outils...WordCamp Lyon / 5 juin 2015

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

[email protected]

 

 

@s_hulard

http://github.com/shulard

PENDANT CETTE SESSION...1. L'intégration continue

2. Avec WordPress

3. Méthodes et outils

L'INTÉGRATION CONTINUE

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

BÉNÉFICESFiabilisation des développements

Automatisation des tâches récurentes

Gain de temps

POUR QUI ?Les grandes équipes

Les utilisateurs des méthodes agiles

Les gros projets

Mais pas que...

AVEC WORDPRESS

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 !

MÉTHODES ET OUTILS

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