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

SymfonyLive Paris 2018 - Migration en Symfony 4

estelle-ac
March 29, 2018
310

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

estelle-ac

March 29, 2018
Tweet

Transcript

  1. 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
  2. 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
  3. 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
  4. Le plan initial • Suivre un changelog • Corriger quelques

    dépréciations • Travailler sur un seul projet aka Connect
  5. 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 :
  6. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  7. 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
  8. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  9. 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
  10. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Deploiement ❏ Infra ❏ Autowiring
  11. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  12. 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 :
  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. 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
  15. 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
  16. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  17. 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
  18. Configuration de bundle Chaque bundle bénéficie de son propre yaml

    de configuration Override pour chaque environnement si nécessaire
  19. 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
  20. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

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

    adaptable • Difficile à maintenir
  22. 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
  23. Migration : utilisation du deploy.yaml Pas de gestion sur l’avenir

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

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  25. RoadMap ❏ Arborescence ❏ Les parameters ❏ Env ❏ Jenkins

    ❏ Gérer des brands sous un même code ❏ Bundles : public et privé ❏ Déploiement ❏ Infra ❏ Autowiring
  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. 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
  28. 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
  29. 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
  30. Qu’est-ce qu’on aurait fait différemment : ➔ Utiliser les recipes

    Et pour la suite : ➔ Symfony 4.1 : Internationalized routing