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

Outils pour améliorer la vie des développeurs Symfony

Outils pour améliorer la vie des développeurs Symfony

Cette conférence est un retour d'expérience sur la mise en place d'outils autour d'un projet Symfony permettant d'améliorer la vie des développeurs. Nous verrons un cas concret d'un projet Symfony avec Docker, un Makefile, des migrations, des tests, une intégration continue ainsi que du déploiement continu via GitLab CI.

Code: https://github.com/mykiwi/symfony-bootstrapped
Joind.in: http://bit.ly/2BQ4KBD
Video: https://www.youtube.com/watch?v=_OEDoPMvNY4

Romain Gautier

March 28, 2018
Tweet

Other Decks in Programming

Transcript

  1. Outils pour améliorer la vie
    des développeurs Symfony
    SensioLabs

    View Slide

  2. Romain Gautier
    Lead Developer & Trainer
    @SensioLabs
    @mykiwi (*almost everywhere)
    github.com/mykiwi
    twitter.com/my_kiwi *
    keybase.io/mykiwi
    gitlab.com/mykiwi

    View Slide

  3. Outils pour améliorer la vie
    des développeurs Symfony

    View Slide

  4. Outils pour améliorer la vie
    des développeurs Symfony

    View Slide

  5. 1. Indispensables
    2. Makefile
    3. Docker
    4. Intégration Continue
    5. Déploiement Continu

    View Slide

  6. git
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  7. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  8. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  9. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  10. Git Hooks :
    git.io/lyrixx-git-hooks
    github.com/greg0ire/git_template
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  11. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  12. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  13. Fixtures
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  14. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  15. hautelook/alice-bundle
    doctrine/doctrine-fixtures-bundle
    fzaninotto/faker
    Packages :
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  16. Migrations
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  17. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  18. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  19. doctrine/doctrine-migrations-bundle
    robmorgan/phinx
    Packages :
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  20. Tests
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  21. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  22. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  23. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  24. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  25. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  26. liip/functional-test-bundle
    Package :
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  27. Indispensables
    - Fixtures : données en db
    - Migrations : maintenance de la
    base de données
    - Tests indépendants, rapides et
    séparés

    View Slide

  28. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  29. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  30. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  31. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  32. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  33. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  34. les développeurs exécutent
    LES MÊMES
    tâches toute la journée, tous les jours
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  35. Makefile

    View Slide

  36. cible ...
    : [prérequis ...
    ]
    [recette]
    [...
    ]
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  37. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  38. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  39. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  40. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  41. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  42. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  43. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  44. cible ...
    : [prérequis ...
    ]
    [recette]
    [...
    ]
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  45. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  46. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  47. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  48. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  49. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    Makefile

    View Slide

  50. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    Makefile

    View Slide

  51. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    Makefile

    View Slide

  52. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    Makefile

    View Slide

  53. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  54. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  55. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  56. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  57. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  58. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  59. Makefile
    Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  60. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  61. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  62. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  63. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  64. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  65. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  66. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  67. Makefile
    - Automatisation des commandes
    - Doit être considéré comme une
    documentation pour les
    développeurs
    Lien vers le Makefile final en fin de slides

    View Slide

  68. View Slide

  69. View Slide

  70. Docker

    View Slide

  71. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  72. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.yml

    View Slide

  73. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.yml

    View Slide

  74. https://hub.docker.com/explore/
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  75. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.yml

    View Slide

  76. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.yml

    View Slide

  77. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker/php/Dockerfile

    View Slide

  78. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  79. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  80. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  81. Récupérer l’UID & GID du volume
    +
    github.com/tianon/gosu
    github.com/ncopa/su-exec
    Gérer les permissions:
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  82. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker/php/Dockerfile

    View Slide

  83. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker/php/entrypoint.sh

    View Slide

  84. docker/node/Dockerfile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  85. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  86. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    Makefile

    View Slide

  87. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  88. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  89. Makefile
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  90. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  91. github.com/iamluc/docker-hostmanager
    github.com/jderusse/docker-dns-gen
    github.com/jwilder/nginx-proxy
    github.com/containous/traefik
    ...
    Accéder aux containers :
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  92. - Léger et rapide
    - Environnement iso prod, pour
    chaque développeur
    - Automatisation
    Lien du projet en fin de slides
    Docker

    View Slide

  93. Intégration Continue

    View Slide

  94. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  95. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    .gitlab-ci.yml

    View Slide

  96. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  97. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    .gitlab-ci.yml

    View Slide

  98. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    .gitlab-ci.yml

    View Slide

  99. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    .gitlab-ci.yml

    View Slide

  100. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    .gitlab-ci.yml

    View Slide

  101. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.gitlab-ci.yml

    View Slide

  102. # gitlab.com/a/b:php
    # gitlab.com/a/b:node
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.gitlab-ci.yml

    View Slide

  103. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  104. push & pull
    export & load
    + cache local
    sans Docker registry :
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  105. - Code style PHP, Twig & JS
    - Erreurs de syntaxe PHP, Twig & YAML
    - Failles de sécurité des dépendances PHP & JS
    - Modèle synchronisé avec la db
    - Détecteur de code mort & copié/collé
    - Métriques / Statistiques
    - Code coverage
    - ...
    Lien du projet en fin de slides
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  106. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    mykiwi/phaudit
    jolicode/phaudit
    jakzal/phpqa
    Images Docker :

    View Slide

  107. - Être au courant des erreurs le
    plus tôt possible
    - Code style uniforme
    - Visibilité sur l’état du projet
    Intégration Continue

    View Slide

  108. Déploiement Continu

    View Slide

  109. Your deploys should be as
    boring, straightforward, and
    stress-free as possible.
    Zach Holman
    https://zachholman.com/posts/deploying-software
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  110. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  111. * Helm prochainement dans le code final
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  112. master = prod
    Exemple :
    develop = staging
    * Exemple pas dans le code final
    1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  113. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker-compose.yml

    View Slide

  114. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    docker/capistrano/Dockerfile

    View Slide

  115. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  116. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  117. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  118. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu

    View Slide

  119. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    Makefile

    View Slide

  120. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
    .gitlab-ci.yml

    View Slide

  121. Automatisation du processus de
    déploiement :
    - 0 erreur humaine
    - moins de stress
    - simple
    Déploiement Continu

    View Slide

  122. Conclusion
    Automatisez un maximum de
    choses pour vous concentrer
    sur votre code métier
    Indispensables Makefile Docker Intégration Continue Déploiement Continu

    View Slide

  123. gnu.org/software/make/manual/make.html
    speakerdeck.com/jubianchi/make-is-an-actual-task-runner
    marmelab.com/blog/2016/02/29/auto-documented-makefile.html
    docs.docker.com/engine/reference/builder/
    github.com/mykiwi/dockerfiles
    github.com/dunglas/symfony-docker
    docs.gitlab.com/ce/ci/yaml/
    Références :

    View Slide

  124. github.com/mykiwi/symfony-bootstrapped
    Code source

    View Slide

  125. https://joind.in/talk/166f2

    View Slide

  126. ?

    View Slide