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

SymfonyLive Paris 2018 - Migration en Symfony 4

7d5c2efb97095ba245259784bce7d256?s=47 estelle-ac
March 29, 2018
290

SymfonyLive Paris 2018 - Migration en Symfony 4

Migration en Symfony 4 de l'API de connexion Allociné, dans un écosystème en 3.3/3.4

7d5c2efb97095ba245259784bce7d256?s=128

estelle-ac

March 29, 2018
Tweet

Transcript

  1. Migration en Symfony 4 de l'API de connexion Allociné, dans

    un écosystème en 3.3/3.4
  2. Estelle Le Cam Backend dev Allociné #root ?

  3. L’écosystème Allociné • Historiquement en .NET • Passage de 70%

    du site en PHP Symfony (3.3) • Dénormalisation MsSql vers • Read-only pour la partie consultative du site
  4. Ecosystème Allociné

  5. Brique SSO chez Allociné : Connect Architecture choisie ? Une

    API Rest Pour qui ? Application web et mobile Fonctionnalités ? Création et gestion de compte utilisateur Initié en Symfony 3
  6. Pourquoi Symfony 4 Parce que c’est cool

  7. Pourquoi migrer en Symfony 4 • Se débarrasser du .NET

    • Projet en manque d’amour • Montée en compétences utile et retour d’expérience
  8. None
  9. Le plan initial • Suivre un changelog • Corriger quelques

    dépréciations • Travailler sur un seul projet aka Connect
  10. Suivre le plan : les changements majeurs • Symfony 4

    adds etc/ in place of app/ Update : the etc/ has been changed to config/ • web/ directory has also been changed to public/ • app.php to index.php • parameters.yml and parameters.yml.dist are gone Changelog :
  11. 37 commits - 194 fichiers

  12. Purification par le feu ou presque

  13. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  14. Arborescence Avant • app/config • src/AppBundle/tests/ • app/Resources/views • app/AppKernel.php

    • web/ • App.php • .yml Après • config/ • tests/ • template/ • src/Kernel.php • public • Index.php • .yaml
  15. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  16. Parameters Fin de la gestion en parameters.yml / parameters.yml.dist Le

    package Incenteev à été mis à jour pour Symfony 4 Utiliser un cache warmup pour générer sa config
  17. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Deploiement ❏ Infra ❏ Autowiring
  18. .ENV HTACCESS

  19. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  20. Jenkins build Exécuter successivement des commandes pour préparer l’application et

    valider les tests S’adapter à Symfony 4 : cp .env.dist .env sed -i s/APP_ENV=dev/APP_ENV=test/g .env sed -i s/APP_DEBUG=1/APP_DEBUG=0/g .env Accès au buildDir STEP 1 : STEP 2 :
  21. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  22. 6 marques en une application Symfony La problématique multi-marques: •

    des routes internationalisées • des templates par marque • et des paramètres de configuration
  23. Allocine/BrandBundle Routes Configs

  24. Migration : ce à quoi on veut arriver Nouvelle structure

    :
  25. Migration Avant : Maintiens de 2 branches git SF 3.4

    compatible 3.3 SF 4 On vérifie la présence des fichiers de config au bon endroit et on les chargent Par environment aussi
  26. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  27. Bundles • Le choix de garder une application avec des

    bundles • Débrancher plus facilement le ModelBundle lors du passage sous la nouvelle base de donnée en postgres
  28. Bundles.php Pour l’installation, recours au : composer require

  29. Configuration de bundle Chaque bundle bénéficie de son propre yaml

    de configuration Override pour chaque environnement si nécessaire
  30. Mon petit bundle : spécifique Allociné • AlloCine\OrmsBundle : ◦

    correction du code déprécié ◦ mis à jour des services accessible en public • AlloCine\BrandBundle : ◦ 2 branches en parallèle pour gérer l’avant et l’après 3.4 • AlloCine\I18NBundle : ◦ adaptation des paths • AlloCine\VersionBundle : ◦ adaptation des paths
  31. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  32. Outil de déploiement • Interne • Symfony 3.4 • Peu

    adaptable • Difficile à maintenir
  33. Migration : deploy.yaml Ajout d’un fichier de configuration par projet

    Avantages : • Facile à maintenir • Lisible humainement • Permets de gérer d’autres structures de projet
  34. Migration : utilisation du deploy.yaml Pas de gestion sur l’avenir

    ! Pourquoi ? Boolean de version 3 versus 4 web par defaut Sf3 ?! Encore ?!!!
  35. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  36. Migration : côté infra

  37. Migration : côté infra

  38. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  39. Autowiring Et le public : true ?

  40. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  41. Vous avez tout noté ?

  42. Plusieurs choix pour une migration réussie • Choix n°1 :

    passer tout son écosystème en symfony 4 • Choix n°2 : maintenir deux branches en parallèle • Choix n°3 : attendre la 4.4
  43. Choix n°1 : Tout en Symfony 4 ? • Peu

    réalisable • Pour beaucoup de petits bundles on a pu facilement les rendre compatibles SF4 • Parce qu’on avait déjà préparé le terrain
  44. Choix n°2 : plusieurs branches ? • Une branche master

    et une branche Symfony4 • Une branche master en Symfony4 et des branches pour chaques spécificités • Problème d'update • Figer les versions est problématique
  45. Choix n°3: attendre la 4.4 ?

  46. Qu’est-ce qu’on aurait fait différemment : ➔ Utiliser les recipes

    Et pour la suite : ➔ Symfony 4.1 : Internationalized routing
  47. Merci !