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

WordCamp Lyon 2015 - WordPress, Git et l'intégration continue

WordCamp Lyon 2015 - WordPress, Git et l'intégration continue

Retour d'expérience sur les pratiques que j'utilise au quotidien pour l'industrialisation de mes développements WordPress...

https://lyon.wordcamp.org/2015/session/wordpress-git-et-lintegration-continue/

Stéphane HULARD

June 05, 2015
Tweet

More Decks by Stéphane HULARD

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. L'INTÉGRATION CONTINUE

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. AVEC WORDPRESS

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. MÉTHODES ET OUTILS

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide