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

Industrialiser son ou ses projets WordPress - WordCamp Paris 2014

Amaury Balmer
January 17, 2014

Industrialiser son ou ses projets WordPress - WordCamp Paris 2014

WordPress est le CMS le plus utilisé sur Internet. Sa mythique installation en 5 minutes a permis de le démocratiser à un tel point qu’une grande majorité de ses utilisateurs sont des non-techniciens. Un CMS grand public, mais aussi un CMS de plus en plus apprécié et demandé par les professionnels.

Il devient alors nécessaire d’appliquer les méthodes d’industrialisation des projets web standards à son CMS préféré. La présentation veillera à présenter les mécanismes clefs de l’industrialisation d’un projet WordPress avec un discours adapté à l’ensemble des populations concernées par un projet web: le client, le chef de projet, le développeur et le devops (hébergeur/sysadmin).

Amaury Balmer

January 17, 2014
Tweet

More Decks by Amaury Balmer

Other Decks in Technology

Transcript

  1. +
    Industraliser ses
    projets WordPress
    WordCamp Paris 2014

    View Slide

  2. +
    Votre orateur
    n  Amaury BALMER
    n  CTO de l’agence BE API
    n  Ancien de la team WP-FR
    n  Co-auteur du book WordPress
    by Pearson
    n  WP Addict since 2005 !
    n  Twitter
    n  @herewithme
    n  @be_api
    n  Web
    n  herewithme.fr
    n  beapi.fr
    n  [email protected]

    View Slide

  3. +
    Pourquoi cette conférence ?
    n  5 ans de péripétie à BeAPI
    n  Taille d’équipe en constante évolution
    n  Nouvelles technologies
    n  Contraintes clientes
    n  La TMA prend une part de + en + importante

    View Slide

  4. +
    Industrialiser ?

    View Slide

  5. +
    Il y a fort longtemps

    View Slide

  6. +
    Aujourd’hui

    View Slide

  7. +
    Objectifs
    n Qualité
    n Fiabilité

    View Slide

  8. +
    Industrialiser
    ses projets informatiques, ses projets PHP !

    View Slide

  9. +
    THE CHECKLIST
    n  Faire appel à des experts
    n  Former les équipes
    n  Appliquer une convention de
    programmation
    n  Utiliser un dépot de code
    n  Utiliser un framework
    n  Adopter un IDE de
    développement
    n  Outil de ticketing
    n  Tests unitaires
    n  Tests fonctionnels
    n  Analyse statique
    n  Intégration continue
    n  Déploiement automatisé

    View Slide

  10. Facile !

    View Slide

  11. Industrialiser WP != PHP

    View Slide

  12. +
    Pourquoi ?
    n  WP couvre un périmètre très large
    n  Budget
    n  Fonctionnalité
    n  Client
    n  Trouver le bon ratio
    n  Des méthodes applicables à tout type de projet

    View Slide

  13. Automatiser les tâches répétitives

    View Slide

  14. Organiser le projet et les équipes

    View Slide

  15. +
    Au sommaire
    1.  Un environnement de développement au TOP !
    2.  Combien d’environnements pour un projet ?
    3.  Industrialiser les déploiements de son applicatif
    4.  Comment recetter efficacement ses projets ?
    5.  Quelle organisation pour la TMA ?

    View Slide

  16. +
    1/5
    Un environnement de
    développement au TOP !
    Public: développeurs

    View Slide

  17. Piège n°1 :
    Utiliser l’éditeur de code
    de WordPress

    View Slide

  18. +

    View Slide

  19. Désactiver le !

    View Slide

  20. define('DISALLOW_FILE_EDIT',  true);  

    View Slide

  21. Piège n°2 :
    Editer directement les fichiers
    sur le serveur

    View Slide

  22. +
    Corruption de fichiers
    n  Prévoir le pire
    n  Incidents externe:
    n  Coupure de courant
    n  Coupure de connexion internet
    n  Plantage système
    n  Quota disque atteint
    n  Perte totale ou partielle de son travail

    View Slide

  23. Piège n°3 :
    Gérer un historique…
    manuellement L

    View Slide

  24. +

    View Slide

  25. STOP !

    View Slide

  26. 1 – Versionner le code source

    View Slide

  27. Qui ? Quand ? Quoi ?

    View Slide

  28. Visionner les différences

    View Slide

  29. Rollback

    View Slide

  30. +
    Quel outil de SCM ?
    n  Centralisé
    n  Simple à apprendre
    n  Gestion des branches
    chaotique
    n  Merge catastrophique
    n  WordPress l’utilise…
    n  Décentralisé
    n  Plus complexe à maitriser
    n  Gestion des branches
    incroyable
    n  Merge qui fonctionne
    n  Github
    SVN GIT

    View Slide

  31. 2 - Développer en local

    View Slide

  32. WAMP, MAMP, LAMP

    View Slide

  33. Mais ça, c’était (bien) avant ;)

    View Slide

  34. Say hello to "works on my
    machine" bugs.

    View Slide

  35. +
    Différences
    n  Système hôte (Windows/Linux/Mac OS)
    n  Version de PHP/Apache/MySQL
    n  Dimensionnement de la machine (RAM/CPU/DISK)

    View Slide

  36. +
    Dépendances
    n  Memcached
    n  Cache objet
    n  Elastic Search
    n  Recherche sémantique
    n  Il est parfois impossible d’installer ces softs sur Windows ou
    Mac !

    View Slide

  37. L’avenir = Virtualisation

    View Slide

  38. View Slide

  39. Say goodbye to "works on my
    machine" bugs.

    View Slide

  40. +

    View Slide

  41. Vos outils de développement
    en local

    View Slide

  42. Code exécuté dans la VM !

    View Slide

  43. +
    Pour commencer
    n  Genesis WordPress
    n  https://github.com/genesis/wordpress
    n  Salty WordPress
    n  https://github.com/humanmade/Salty-WordPress
    n  VIP Quickstart
    n  https://github.com/Automattic/vip-quickstart

    View Slide

  44. +
    2/5
    Combien d’environnements
    pour un projet ?
    Public : tous

    View Slide

  45. Au minimum 2 !

    View Slide

  46. +
    Développement
    Qualif interne / Intégration
    Qualification
    Production

    View Slide

  47. Surdimensionné ?

    View Slide

  48. Comment cloner efficacement
    un site WP ?

    View Slide

  49. +
    Rappel technique
    WordPress
    Fichiers
    Base de
    données

    View Slide

  50. +
    Export / Import de la BDD
    n  Classique : PhpMyAdmin
    n  Alternative : Adminer
    n  Serveur : mysql / mysqldump
    n  Spécialisé :
    n  bigdump
    n  mysqldumper

    View Slide

  51. +
    Copie des fichiers
    n  Serveur à serveur :
    n  RSYNC
    n  LFTP
    n  CurlFTPS !
    n  Alternative
    n  Création d’une archive, transfert, puis extraction
    n  Téléchargement en local puis renvoi… L

    View Slide

  52. URL absolues L
    http://example.com/page2/

    View Slide

  53. +
    Méthodes à oublier
    n  Constantes
    n  define('WP_HOME','http://example.com');  
    n  define('WP_SITEURL','http://example.com');  
    n  Requêtes SQL
    n  Rechercher/remplacer dans le fichier d’export SQL
    n  Plugins

    View Slide

  54. +
    Méthodes à considérer
    n  Scripts PHP autonome & générique !
    n  Search Replace DB
    n  https://github.com/interconnectit/Search-Replace-DB
    n  DBSR: Database Search & Replace
    n  https://github.com/DvdGiessen/DBSR
    n  Plus fiable, plus rapide

    View Slide

  55. +
    3/5
    Industrialiser les déploiements
    de son applicatif

    View Slide

  56. 1 – Déployer du code

    View Slide

  57. Ajouter, Modifier, Supprimer

    View Slide

  58. Quelques principes

    View Slide

  59. Code de production
    =
    Code identifié et versionné

    View Slide

  60. Interdire les MAJ depuis le CMS
    Prévoir le pire…
    define('DISALLOW_FILE_MODS',  true);  

    View Slide

  61. Déployer en qualif comme en
    production !

    View Slide

  62. Le déploiement pour tous !

    View Slide

  63. Déploiement automatisé

    View Slide

  64. +
    Automatisation d’actions
    n  Backup complète
    n  Vérifier que l’environnement est prêt à recevoir une nouvelle version
    (espace disque, charge serveur)
    n  Récupérer les modifications à appliquer
    n  Appliquer les modifications
    n  Nettoyer les caches applicatifs s’ils existent
    n  Et à tout moment : Rollback !
    n  Prévoir le pire

    View Slide

  65. +
    Solutions open-source
    n  Capistrano / Webistrano
    n  Ruby
    n  Fabric
    n  Python

    View Slide

  66. Complexe & lié à SSH

    View Slide

  67. +
    Quels types d’accès ?
    0
    1
    2
    3
    4
    5
    6
    0 2 4 6 8 10
    Marge de manoeuvre
    Complexité

    View Slide

  68. Semi-industrialiser ses
    déploiements ?

    View Slide

  69. Alernative 1:
    Déployer avec le SCM

    View Slide

  70. svn update / git pull

    View Slide

  71. Alternative 2: Avec Git et FTP

    View Slide

  72. git ftp
    https://github.com/git-ftp/git-ftp

    View Slide

  73. Alternative 3 : Solutions “On demand”
    Rapide, simple mais payant !

    View Slide

  74. +
    A tester !
    n deployhq.com
    n beanstalkapp.com
    n ftploy.com

    View Slide

  75. Un déploiement peut générer des
    actions back-office !

    View Slide

  76. 2 – Y’a pas que le code dans la
    vie !

    View Slide

  77. Scripter les actions back-office
    liées à un déploiement

    View Slide

  78. Exemple : Advanced Custom Fields
    Migration de la version 3 vers 4

    View Slide

  79. 2 possibilités

    View Slide

  80. Ecrire et exécuter un script PHP

    View Slide

  81. +
    $blogs  =  get_blogs();  
     
    foreach  (  $blogs  as  $blog  )  {  
     switch_to_blog(  $blog-­‐>blog_id  );  
     
     activate_plugin(  'bacf-­‐addon1/acf-­‐addon1.php',  true  );  
     activate_plugin(  'bacf-­‐addon2/acf-­‐addon2.php',  true  );  
     activate_plugin(  'bacf-­‐addon3/acf-­‐addon3.php',  true  );    
       
    }

    View Slide

  82. WP-CLI !
    wp-cli.org

    View Slide

  83. wp-­‐cli  plugin  enable  ‘acf-­‐addon1’  –-­‐network  
    wp-­‐cli  plugin  enable  ‘acf-­‐addon2’  –-­‐network  
    wp-­‐cli  plugin  enable  ‘acf-­‐addon3’  –-­‐network  

    View Slide

  84. 3 - Aucun accès ?

    View Slide

  85. Générer des archives
    différentielles avec le SCM

    View Slide

  86. git archive / svn ???

    View Slide

  87. Générer la liste des fichiers à
    supprimer avec le SCM

    View Slide

  88. git diff --name-status
    svn diff --summarize

    View Slide

  89. Documenter les livraisons
    Prévoir le pire…

    View Slide

  90. +
    4/5
    Comment recetter efficacement
    ses projets ?
    GDP / Client

    View Slide

  91. Le cahier de recette

    View Slide

  92. Idée reçue :
    “Je connais le périmètre du projet
    par coeur”

    View Slide

  93. Prévoir le pire !

    View Slide

  94. L’écrire dès que les
    développements sont lancés !

    View Slide

  95. +
    Groupe Test Réussi
    Espace utilisateur
    Créer un compte sans FB Oui
    Créer un compte avec FB Non
    Modifier son avatar Oui
    Modifier ses informations personnelles Oui
    Modifier son mot de passe Oui
    Supprimer son compte Oui
    Créer une galerie Oui
    Ajouter une photo Non
    Etc…

    View Slide

  96. Chiant, long et répétitif …

    View Slide

  97. Le rééxécuter à chaque
    déploiement !

    View Slide

  98. Effets de bord

    View Slide

  99. Chiant, long et répétitif …

    View Slide

  100. Automatisez-les !

    View Slide

  101. Selenium

    View Slide

  102. +
    Kesako ?
    n  Extension Firefox
    n  Enregistrer un scénario
    n  Créer un compte utilisateur
    n  Ajouter une photo
    n  Ajouter un commentaire
    n  Exécuter un scénario
    ponctuellement
    n  Application Java
    n  Executer massivement des
    scénarios
    n  Firefox
    n  Chrome
    n  IE
    Selenium IDE Selenium WebDriver

    View Slide

  103. Webdriver = Java

    View Slide

  104. +

    View Slide

  105. Mise en place complexe

    View Slide

  106. Privilégier les solutions
    “On demand”

    View Slide

  107. +
    A tester !
    n saucelabs.com
    n browserstack.com/automate
    n  nerrvana.com
    n  testingbot.com

    View Slide

  108. Maintenance préventive

    View Slide

  109. +
    5/5
    Quelle organisation pour la
    TMA ?
    GDP / Client / Dev

    View Slide

  110. TMA = Tierce Maintenance Applicative
    Corrections & évolutions

    View Slide

  111. 1 demande cliente = 1 ticket

    View Slide

  112. Adopter un outil de ticket

    View Slide

  113. Redmine / Trac / Jira !

    View Slide

  114. +
    1 ticket
    n  Date de création
    n  Rapporteur
    n  Sujet
    n  Description
    n  Captures d’écran
    n  Navigateurs affectés
    n  Etc.

    View Slide

  115. Prédiction trop aléatoire sur la
    date de mise en production

    View Slide

  116. Considérer son projet comme un
    applicatif

    View Slide

  117. Numérotation des versions de
    l’application

    View Slide

  118. Adopter une politique de
    versionning adaptée

    View Slide

  119. 1 ticket = 1 branche dans le SCM

    View Slide

  120. Complexe ?
    Tout dépend du SCM…

    View Slide

  121. 1 version = 1 à n tickets

    View Slide

  122. Le chef de projet et le client
    maitrisent le cycle de vie du projet

    View Slide

  123. Créer une version

    View Slide

  124. Fusion des branches dites “de
    tickets” dans la version stable

    View Slide

  125. Tag de la version dans le SCM

    View Slide

  126. GIT, GIT, GIT

    View Slide

  127. +
    C’est déjà fini !
    Si peu…

    View Slide

  128. Passionné(e) par ces
    problématiques ?
    BE API recrute !
    [email protected]

    View Slide

  129. Merci de votre attention !
    Des questions ?

    View Slide