Comment et quand passer de Drupal 7 à Drupal 9 ?
Si vous faites partie des 60 % de sites Drupal qui sont encore sous Drupal 7 au moment où nous écrivons ces lignes, vous vous demandez peut-être à quoi ressemble le chemin de mise à niveau pour passer de Drupal 7 à Drupal 9. À quoi ressemble la mise à niveau majeure pour sauter deux versions de Drupal ? Quelle est la différence avec une mise à niveau vers Drupal 8 effectuée au cours des dernières années ? Et combien de temps faudra-t-il attendre avant de devoir le refaire ?
Mise à niveau via Drupal 8
Avant la sortie de Drupal 9, le meilleur moyen pour les sites Drupal 7 de passer à Drupal 9 était de passer à Drupal 8. Le grand avantage de l’évolution de Drupal 9 est que la mise à jour d’une version tardive de Drupal 8 vers Drupal 9.x ressemble davantage à une mise à niveau incrémentielle qu’à l’effort massif de replatforming que les anciennes migrations Drupal impliquaient. Les sites qui ont pris le train en marche de Drupal 8 avant la sortie de Drupal 9.0 peuvent bénéficier d’une mise à niveau simple de Drupal 8 à Drupal 9.0 au lieu d’un autre grand projet de migration.
La migration vers Drupal 8 reste une bonne option pour les sites Drupal 7, même si Drupal 9 est désormais disponible.
Vous constaterez peut-être que les modules ou thèmes essentiels dont vous avez besoin sont prêts pour Drupal 8 mais pas encore disponibles pour Drupal 9. Le chemin de mise à niveau de Drupal 8 à Drupal 9 pour de nombreux modules et thèmes devrait être relativement trivial, de sorte que beaucoup d’entre eux devraient être prêts bientôt. Cependant, il se peut que certains d’entre eux prennent plus de temps. Dans l’intervalle, vous pouvez effectuer la migration de Drupal 7 vers Drupal 8 maintenant et la mise à niveau plus simple de Drupal 8 vers Drupal 9 plus tard, lorsque tout ce dont vous avez besoin est prêt.
La migration de Drupal 7 vers Drupal 8
La mise à niveau de Drupal 7 à Drupal 8 implique des changements assez importants. Certaines des choses que vous deviez auparavant faire via des modules contribués dans Drupal 7 sont maintenant incluses dans le noyau de Drupal 8. Cependant, la façon dont vous les mettez en œuvre peut ne pas être la même et un certain remaniement peut être nécessaire pour obtenir la parité des fonctionnalités lorsque vous migrez vers Drupal 8.
La migration proprement dite n’est pas une simple mise à niveau de la base de données, comme c’était le cas de Drupal 6 à Drupal 7 ; au lieu de cela, vous pouvez migrer la configuration et le contenu de votre site vers Drupal 8. Vous avez le choix entre deux méthodes :
- Migrez tout, y compris le contenu et la configuration, dans une installation Drupal 8 vide (la méthode par défaut).
- Créez manuellement un nouveau site Drupal 8, en configurant les types de contenu et les champs comme vous le souhaitez, puis faites-y migrer votre contenu Drupal 7.
Pour un examen plus approfondi de ce à quoi ressemblent ces migrations, consultez le document intitulé An Overview for Migrating Drupal Sites to 8.
LA PLANIFICATION DES MIGRATIONS
Le planificateur de migration est un outil utile que vous pouvez envisager dans votre processus de planification de la migration. Cet outil interroge une base de données pour générer un fichier Excel que les chefs de projet ou les architectes techniques peuvent utiliser pour aider à planifier les migrations. Les développeurs qui effectuent les migrations peuvent ensuite utiliser les feuilles de calcul.
EFFECTUER DES MIGRATIONS
Core est livré avec certaines capacités de migrations automatiques du contenu. Si votre site s’en tient au noyau et aux types de contenu et champs communs, vous pouvez utiliser ces migrations automatiques. Toutefois, si votre site repose en grande partie sur des modules contribués ou du code personnalisé, une migration automatique peut ne pas être possible ; vous devrez peut-être adopter une approche de migration personnalisée.
La mise à jour de Drupal Migrate, Migrate Plus et Migrate Tools sont de bons points de départ pour effectuer une migration personnalisée. Ils ajoutent des éléments tels que le support de Drush pour les tâches de migration et le support de migration pour certains types de champs non essentiels. Vous pouvez accéder à plusieurs processeurs de migration personnalisés qui permettent d’effectuer facilement des migrations assez complexes. Pour ce faire, il suffit d’ajouter quelques lignes à un fichier YAML, comme un fichier entity_lookup processor qui prendra le texte d’un contenu Drupal 7 et effectuera une recherche pour déterminer à quelle entité Drupal 8 le texte fait référence.
Drupal 7 fonctionne sur les anciennes versions de PHP mais recommends a minimum of 7.2. Si vous migrez à partir d’un site Drupal 7 plus ancien, il peut y avoir plusieurs autres exigences de plate-forme à examiner et à mettre en œuvre.
OUTILLAGE ET CHANGEMENTS DE PARADIGME
Avec le passage à Drupal 8, les développeurs doivent également utiliser de nouveaux outils. Vous utilisez désormais Composer pour ajouter des modules et leurs dépendances, plutôt que Drush. Twig a remplacé PHPTemplate comme moteur de templating par défaut. Certains paradigmes de base ont changé ; par exemple, les développeurs doivent apprendre à penser en termes d’événements, ou d’extension d’objets, au lieu de l’ancien système de crochets. De nombreux hooks fonctionnent encore, mais ils seront probablement dépréciés au fil du temps, et les nouvelles méthodes sont des moyens plus sûrs d’écrire du code. Les changements ne sont pas insurmontables, mais votre organisation doit investir dans l’apprentissage de la nouvelle façon de faire les choses. Vous devrez tenir compte de ce surcoût lié à l’apprentissage en venant de Drupal 7 ; les équipes de développement peuvent avoir besoin de plus de temps pour accomplir les tâches pendant qu’elles apprennent les nouveaux outils et paradigmes.
Le modèle de dépréciation de Drupal 8
En plus des grands changements dans le noyau de Drupal 8 et des détails d’implémentation, Drupal 8 présente également un modèle de dépréciation qui est familier dans le monde des logiciels, mais nouveau dans les mises à jour de version de Drupal. Au lieu de déprécier un tas de code lors d’une mise à jour majeure de la version, Drupal 8 a introduit un modèle de dépréciation graduelle.
Au fur et à mesure que des fonctionnalités et des améliorations sont apportées à la base de code de Drupal 8, les anciennes méthodes et fonctions sont marquées comme dépréciées dans le code. Puis, quelques versions plus tard – ou dans Drupal 9 – ce code est supprimé. Cela donne aux équipes de développement une période de grâce de rétrocompatibilité, pendant laquelle elles peuvent voir les alertes indiquant que le code est déprécié, ce qui donne aux organisations le temps de mettre en œuvre le nouveau code avant qu’il ne soit complètement supprimé.
Le code déprécié fournit également une indication facile sur la façon de retravailler votre code en utilisant de nouveaux services et méthodes. Il suffit de regarder ce que fait le hook, et de le faire directement dans votre code.
Ce modèle de dépréciation progressive est l’une des principales raisons pour lesquelles la mise à niveau de Drupal 9 ressemble davantage à une version mineure de Drupal 8 qu’à un effort majeur de replatforming.
Passer directement à Drupal 9
Cela dit, pouvez-vous passer de Drupal 7 à Drupal 9 ? Si vous souhaitez ignorer complètement Drupal 8, vous pouvez passer directement à Drupal 9. L’écosystème de migration de Drupal 7 est toujours disponible dans Drupal 9. Drupal 9 contient le même module migrate_drupal dont vous avez besoin pour migrer vers Drupal 8. Des discussions ont eu lieu sur la possibilité de faire de ce module un module contributif pour Drupal 10, mais aucune décision n’a été prise à l’heure où nous écrivons ces lignes.
Si vous avez l’intention de suivre cette voie, n’oubliez pas que toutes les considérations relatives à la mise à niveau de Drupal 7 à Drupal 8 s’appliquent également si vous passez directement à Drupal 9. Vous devrez toujours gérer la planification de la migration, vous occuper des outils et des changements de paradigme, et prendre en compte les exigences de la plate-forme.
En fin de compte, cependant, passer directement de Drupal 7 à Drupal 9 est une option valable pour les sites qui n’ont pas migré vers Drupal 8, maintenant que Drupal 9 est sorti.
Quand migrer vers Drupal 9
Quelle que soit la voie que vous choisissez, qu’il s’agisse d’une migration via Drupal 8 ou directement vers Drupal 9, vous devez commencer la migration de Drupal 7 vers Drupal 9 dès que possible. Drupal 7 et Drupal 8 arriveront tous deux en fin de vie le 1er novembre 2023. Il vous reste donc moins d’un an et demi pour planifier et exécuter une migration majeure de la plate-forme avant de devoir faire face à des problèmes de sécurité liés à la fin du support officiel de Drupal. Nous aborderons ce sujet plus en détail dans la suite de cette série.
Pour tout site qui passe de Drupal 7 à Drupal 9, vous devrez effectuer un travail d’architecture de l’information pour préparer la migration vers Drupal 8 ou Drupal 9. Une fois que vous êtes sur Drupal 8, la mise à niveau vers Drupal 9 est minime ; vous devrez tenir compte des dépréciations de code, mais il n’y a pas de migration de contenu majeure à prévoir. Consultez notre Preparing for Drupal 9 pour plus de détails sur ce que pourrait être ce processus de planification.
Mais qu’en est-il de l’attente d’une version ultérieure, plus stable, de Drupal 9, vous demandez-vous ? Il s’agit d’une stratégie courante dans le monde des logiciels, mais elle ne s’applique pas à la mise à niveau de Drupal 9. Étant donné que Drupal 9 est traité comme une mise à jour incrémentale de Drupal 8, il n’y a pas de grandes surprises ou de gros morceaux de nouveau code dans Drupal 9. Le code de base qui fait fonctionner Drupal 9 est déjà disponible dans Drupal 8. Il n’y a pas de nouvelles fonctionnalités dans la version Drupal 9.0, mais seulement la suppression du code qui a déjà été déprécié dans les versions mineures de Drupal 8.
À l’avenir, le plan pour Drupal 9 est de publier de nouvelles fonctionnalités tous les six mois dans des versions mineures. L’objectif est que ces fonctionnalités soient rétrocompatibles et que Drupal entre dans l’ère actuelle du développement itératif par rapport aux grands projets de replatforming d’autrefois. Il n’y a pas de grandes surprises ou de corrections majeures de la fiabilité à l’horizon pour Drupal 9 ; juste une itération continue sur une plateforme solide. Il n’y a donc aucun besoin ou avantage à attendre une version ultérieure de Drupal 9 !
Comment migrer vers Drupal 9
Planifier la migration
La planification d’une migration de Drupal 7 vers Drupal 8 ou de Drupal 7 vers Drupal 9 devient une question d’envergure. Voulez-vous simplement migrer le contenu de votre site existant vers une plateforme moderne et sécurisée ? Ou êtes-vous prêt à faire un investissement plus important pour mettre à jour votre site en examinant l’architecture de l’information, les fonctionnalités et le design ? Trois facteurs sont susceptibles de façonner ce processus de décision :
- Temps et budget
- Compétences des développeurs
- Fenêtre de sortie
TEMPS ET BUDGET POUR UNE MIGRATION
Combien de temps pouvez-vous consacrer à ce qui risque d’être un effort important de replatforming ? Quel est votre budget pour ce projet ? Le lancement doit-il avoir lieu avant une date importante pour votre organisation, comme l’inscription à l’université ou une date limite importante fixée par le gouvernement ? Votre budget peut-il supporter des travaux supplémentaires, tels qu’un rafraîchissement du design ?
Pour certain il peut être plus facile d’obtenir un budget pour une opération globale, migration plus rafraichissement graphique du site, plutôt que de le faire en deux phases.
Pour d’autres, ce sera l’inverse, donc les deux phases pourront être traitées à la suite.
Lorsque vous prenez en compte le temps et le budget nécessaires à la réalisation de travaux supplémentaires, n’oubliez pas que des éléments tels que la révision de l’architecture d’information d’un site peut vous faire gagner du temps et de l’argent au cours du processus de migration. Budgétiser le temps nécessaire pour effectuer ce travail en amont peut permettre de gagner énormément de temps et d’argent plus tard dans le processus de migration, en réduisant la complexité inutile avant la migration au lieu de devoir travailler avec des migrations personnalisées pour transférer du contenu et des types d’entités que vous n’utilisez plus. Cela améliore également la maintenance du site et permet aux développeurs et aux éditeurs de gagner du temps dans leur travail quotidien sur le nouveau site.
TENEZ COMPTE DES COMPÉTENCES DES DÉVELOPPEURS LORSQUE VOUS PLANIFIEZ VOTRE MIGRATION
Dix ans, c’est beaucoup de temps pour que les développeurs travaillent avec un framework spécifique. Si vous utilisez Drupal 7 depuis 2011, vos développeurs ont probablement une grande expérience de la « façon Drupal 7 » de faire les choses. Beaucoup de ces choses changent dans Drupal 8.
Composer, par exemple, est un énorme changement pour le mieux en ce qui concerne la gestion des dépendances. Toutefois, les développeurs qui ne savent pas l’utiliser devront l’apprendre. Une autre grande différence est qu’une grande partie du code de base de Drupal 8 et Drupal 9 est construite au-dessus de Symfony, qui a changé de nombreux paradigmes mentaux que les développeurs Drupal expérimentés sont habitués à utiliser. Si certaines choses peuvent sembler inchangées – un bloc est toujours un bloc, par exemple – la façon dont elles sont mises en œuvre est différente. Certaines choses n’ont plus la même apparence. Les développeurs devront par exemple utiliser des fichiers YAML au lieu de crochets pour créer des éléments de menu. Même le débogage a changé ; le débogage simple via l’instruction print() n’est pas toujours suffisant dans le nouveau monde, si bien que de nombreux développeurs utilisent des IDE comme PHPStorm, ou une multitude de plugins avec d’autres éditeurs, pour coder efficacement dans les nouvelles versions de Drupal.
Tous ces changements s’accompagnent de frais généraux. Les développeurs doivent apprendre de nouveaux outils et de nouvelles façons de faire les choses lorsqu’ils passent de Drupal 7 à Drupal 9. Cette courbe d’apprentissage doit être prise en compte dans le temps et le budget, non seulement pour la migration elle-même, mais aussi pour le travail de développement et la maintenance après la mise à niveau. La progression pendant les sprints sera probablement lente, et les développeurs peuvent initialement se sentir résistants ou frustrés pendant qu’ils apprennent les nouvelles façons de faire.
Faire appel à une aide extérieure pendant le processus de migration peut atténuer une partie de ces frais d’apprentissage. En vous associant à une société de développement Drupal expérimentée, vous pourrez planifier et mettre en œuvre votre migration plus rapidement. L’un des éléments à prendre en compte lors du choix d’un partenaire extérieur est le degré de collaboration avec votre équipe interne. Lorsque vous choisissez une société de développement Drupal pour collaborer avec votre équipe interne, pensez à l’intérêt de vous associer à des développeurs expérimentés qui peuvent « apprendre » à vos équipes internes comment faire les choses. Cela réduit la courbe d’apprentissage pour une équipe qui a une grande expérience des anciennes versions de Drupal et peut aider votre équipe à se mettre au diapason plus rapidement, ce qui permet de réaliser des économies pendant la première année de votre nouveau site.
PLANIFIER UNE ISSUE DE SORTIE
L’autre aspect de la planification de la mise à niveau de Drupal 7 vers Drupal 9 est la planification d’une fenêtre de sortie. Prévoyez de terminer votre projet de migration avant la fin de vie de Drupal 7, prévue en novembre 2023. Si vous ne pouvez pas respecter cette échéance, commencez dès maintenant à planifier un engagement de support étendu pour sécuriser votre site jusqu’à ce que vous soyez en mesure de terminer la migration.
Vous voudrez planifier la fenêtre de publication en fonction des dates clés de votre entreprise et des autres fenêtres de support de votre pile. Par exemple, si vous êtes un détaillant, vous voudrez peut-être que la migration soit terminée avant la fin du troisième trimestre pour ne pas avoir à effectuer de mise à niveau pendant les vacances. Les établissements d’enseignement peuvent planifier leur mise à jour pendant les périodes creuses du calendrier scolaire, ou les sites Web gouvernementaux peuvent avoir besoin d’être prêts pour une législation importante.
En ce qui concerne votre pile, vous voudrez planifier d’autres fenêtres de publication importantes, telles que la fin du support des versions PHP ou la mise à niveau vers Symfony 4.4. Ceci est particulièrement important si vous devez mettre à niveau les dépendances pour supporter votre migration de Drupal 7 à Drupal 9. Consultez la page Drupal 8 Release Planning in the Enterprise pour en savoir plus sur la planification des versions.
Revoir l’architecture de l’information, les caractéristiques et la conception.
Le passage de Drupal 7 à Drupal 9 étant très important, c’est le moment de revoir l’architecture de l’information du site, d’effectuer un audit des fonctionnalités et de déterminer si vous souhaitez apporter des modifications à la conception.
EST-IL TEMPS DE METTRE À JOUR L’ARCHITECTURE DE L’INFORMATION DE VOTRE SITE ?
Avant de vous lancer dans un projet de mise à niveau de Drupal 9, vous devez effectuer un audit de votre site Drupal 7 existant afin de déterminer ce que vous souhaitez conserver et ce que vous pouvez perdre en cours de route. Avez-vous mis en place un type de contenu que vous n’avez utilisé qu’une ou deux fois, et auquel vous n’avez plus jamais touché ? Vous pouvez peut-être le supprimer au lieu de le migrer. Utilisez-vous une taxonomie qui a été mise en place il y a des années, mais qui n’a plus de sens ? C’est le moment de l’affiner pour la nouvelle version de votre site.
La migration du contenu est également un moment relativement facile pour manipuler vos données. Vous pouvez, par exemple, migrer des nœuds ou des fichiers Drupal 7 vers des entités médias Drupal 9. Ou migrer des champs de texte en champs d’adresse ou des champs de liste en termes de taxonomie. Vous pouvez également fusionner plusieurs types de contenu Drupal 7 en un seul type de contenu Drupal 9. Ou encore, migrer le contenu d’un type de champ Drupal 7 obsolète vers un type de champ Drupal 9 différent, mais pris en charge. Ce genre de choses demande un peu plus de travail lors de la migration, mais est tout à fait possible avec les outils de migration, et n’est pas difficile pour les développeurs ayant une expérience de la migration. L’internet regorge d’articles sur la façon de faire ce genre de choses.
En plus des petits détails, c’est aussi le moment de se pencher sur certaines questions générales, comme par exemple, à qui sert le site ? A-t-il changé depuis la création de la version Drupal 7 ? Devriez-vous apporter des changements à l’architecture de l’information pour mieux servir le public d’aujourd’hui dans le prochain site Drupal 9 ?
VOS BESOINS EN MATIÈRE DE FONCTIONNALITÉS ONT-ILS CHANGÉ ?
Drupal 7 est sorti en 2011. Plus d’une décennie plus tard, en 2022, les fonctionnalités qui semblaient importantes à la création de Drupal 7 ont changé. Comment les besoins en fonctionnalités de vos rédacteurs de contenu ont-ils évolué ? Votre site est-il devenu très riche en médias et vos rédacteurs de contenu ont-ils besoin de grandes archives d’images consultables ? Souhaitez-vous offrir une expérience frontale dynamique via une application React sur mesure, tout en offrant aux rédacteurs de contenu un cadre Drupal découplé pour travailler ?
De nombreux éditeurs adorent la nouvelle expérience Layout Builder pour créer des pages de site personnalisées. C’est quelque chose qui n’existe pas dans le noyau de Drupal 7 et qui est sans doute meilleur que ce que vous obtenez même lorsque vous étendez Drupal 7 avec des modules contribués. Drupal 8 et 9 intègrent la gestion des médias et un éditeur WYSIWYG, ce qui élimine le besoin de dizaines de modules Drupal 7 contribués qui ne coopèrent pas toujours entre eux, et concentre l’attention des développeurs sur l’UX éditoriale pour une solution canonique unique.
Revisitez les besoins de vos éditeurs de contenu et des utilisateurs du site pour déterminer si les fonctionnalités existantes du site actuel ne sont plus importantes et si de nouvelles fonctionnalités méritent d’être prises en compte dans le processus de mise à niveau. Cela peut s’avérer particulièrement utile si vous constatez que les fonctionnalités actuelles fournies par des modules contribués ne sont plus nécessaires ; vous n’avez alors pas à vous soucier de savoir si une version de ces modules est disponible dans Drupal 8/9, et pouvez déprécier ces modules.
PRÊT POUR UNE MISE À JOUR DU DESIGN ?
Si votre site Drupal 7 n’a pas été rafraîchi depuis des années, le processus de mise à niveau est un bon moment pour le faire. Prévoyez un rafraîchissement du design une fois la mise à niveau terminée. Drupal 9 disposera d’un nouveau thème par défaut, Olivero qui présente un design moderne et ciblé, flexible et conforme aux directives d’accessibilité WCAG AA. Olivero n’a pas encore été ajouté au noyau de Drupal – il est prévu de l’ajouter dans la version 9.1 – mais il est disponible dès maintenant en tant que contributed module, tout site Drupal 8 ou Drupal 9 peut l’utiliser. Olivero est un excellent point de départ pour les sites qui souhaitent un design actualisé.
Si vous prévoyez un projet de conception personnalisé, gardez l’accessibilité et la simplicité au premier plan de votre processus de conception. Il est possible que vous souhaitiez vous engager dans le processus de découverte de la conception avec une société de conception avant de planifier votre version de Drupal 9 ; un bon partenaire de conception peut faire des recommandations qui affectent la façon dont vous procédez à votre migration.
Effectuer la migration
Le processus de migration de Drupal 7 vers Drupal 8 s’est amélioré depuis la sortie initiale de Drupal 8, mais il peut encore s’agir d’un processus complexe et long pour les sites complexes. Nous avons rédigé un document intitulé An Overview for Migrating Drupal Sites to 8 ( Vue d’ensemble de la migration des sites Drupal vers Drupal 8 ) afin de donner un aperçu de ce processus :
- Planifier la migration
- Générer ou écrire à la main les fichiers de migration
- Configurer un site Drupal 8 pour effectuer des migrations.
- Exécuter les migrations
- Confirmer le succès de la migration
- Effectuez un nettoyage de la migration, le cas échéant
Contrairement aux mises à jour précédentes de Drupal, la migration vers Drupal 8 n’est pas une mise à jour automatique. La configuration et le contenu d’un site Drupal 7 doivent être migrés séparément vers un nouveau site Drupal 8. Il existe des outils permettant d’automatiser la création des fichiers de migration, mais si votre site est complexe et utilise beaucoup de code personnalisé ou de modules contribués, les outils automatisés n’auront qu’une portée limitée. Vous devrez revoir la logique commerciale et sélectionner de nouvelles options pour obtenir des résultats similaires ou supprimer l’utilisation des modules contribués et du code personnalisé de Drupal 7 dans votre site pour passer à Drupal 8 et Drupal 9.
Que vous souhaitiez passer à Drupal 8, puis à Drupal 9, ou migrer directement de Drupal 7 à Drupal 9, les considérations relatives à la migration et le processus lui-même seront les mêmes. La seule différence réside dans le fait que le nouveau site sur lequel vous migrez le contenu est un site Drupal 8 ou un site Drupal 9.
Mise à niveau de Drupal 8 vers Drupal 9
Si vous choisissez de passer par Drupal 8, une fois que vous avez atteint Drupal 8, terminer la migration vers Drupal 9 est relativement facile. Effectuez la mise à niveau vers la dernière version de Drupal 8 ; la mise à niveau vers Drupal 9 nécessite Drupal 8.8.x ou 8.9.x. En cours de route, vous serez informé de tout code déprécié ou module contributif que vous devrez supprimer avant d’effectuer la mise à niveau vers Drupal 9. Assurez-vous que tout code personnalisé est compatible avec Drupal 9, puis mettez à jour le code de base vers Drupal 9 et exécutez update.php.