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

747fc195ba31cd3b5f6ab056efad7bee?s=128

Romain Gautier

March 28, 2018
Tweet

Transcript

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

  2. Romain Gautier Lead Developer & Trainer @SensioLabs @mykiwi (*almost everywhere)

    github.com/mykiwi twitter.com/my_kiwi * keybase.io/mykiwi gitlab.com/mykiwi
  3. Outils pour améliorer la vie des développeurs Symfony

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

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

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

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

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

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

    Déploiement Continu
  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
  11. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5.

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

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

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

    Déploiement Continu
  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
  16. Migrations 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue

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

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

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

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

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

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

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

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

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

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

    Intégration Continue 5. Déploiement Continu
  27. Indispensables - Fixtures : données en db - Migrations :

    maintenance de la base de données - Tests indépendants, rapides et séparés
  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
  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
  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
  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
  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
  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
  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
  35. Makefile

  36. cible ... : [prérequis ... ] [recette] [... ] 1.

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

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

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

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

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

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

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

    Déploiement Continu
  44. cible ... : [prérequis ... ] [recette] [... ] 1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Déploiement Continu
  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
  68. None
  69. None
  70. Docker

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

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

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

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

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

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

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

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

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

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

    Déploiement Continu
  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
  82. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5.

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

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

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

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

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

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

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

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

    Déploiement Continu
  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
  92. - Léger et rapide - Environnement iso prod, pour chaque

    développeur - Automatisation Lien du projet en fin de slides Docker
  93. Intégration Continue

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

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

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

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

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

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

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

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

    Déploiement Continu docker-compose.gitlab-ci.yml
  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
  103. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5.

    Déploiement Continu
  104. push & pull export & load + cache local sans

    Docker registry : 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
  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
  106. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5.

    Déploiement Continu mykiwi/phaudit jolicode/phaudit jakzal/phpqa Images Docker :
  107. - Être au courant des erreurs le plus tôt possible

    - Code style uniforme - Visibilité sur l’état du projet Intégration Continue
  108. Déploiement Continu

  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
  110. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5.

    Déploiement Continu
  111. * Helm prochainement dans le code final 1. Indispensables 2.

    Makefile 3. Docker 4. Intégration Continue 5. Déploiement Continu
  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
  113. 1. Indispensables 2. Makefile 3. Docker 4. Intégration Continue 5.

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

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

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

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

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

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

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

    Déploiement Continu .gitlab-ci.yml
  121. Automatisation du processus de déploiement : - 0 erreur humaine

    - moins de stress - simple Déploiement Continu
  122. Conclusion Automatisez un maximum de choses pour vous concentrer sur

    votre code métier Indispensables Makefile Docker Intégration Continue Déploiement Continu
  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 :

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

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

  126. ?