Upgrader Core et Module de Drupal 8

  • | Développement
Upgrader Core et Module de Drupal 8

Comment Upgrader Core et Module de Drupal 8? Voici la marche à suivre pas à pas pour faire l'update de Drupal et de ses modules contributeurs ainsi que la check-list pour reproduire la mise à jour sur un site en production.

1. Sauvegarde de Drupal

Au préalable avant d'upgrade Drupal, on va faire une sauvegarde de tout le site : base de données + répertoire files + code (normalement dans un dépôt).

Avec Git on crée une branch pour l'upgrade (rappel des commandes Git).

Plusieurs méthodes sont possibles :

  • Sauvegarde via le module backup & migrate

    On sauvegarde l'entièreté du site soit en téléchargeant l'archive soit en créant une archive sur le serveur.

    Sauvegarde sur Backup And Migrate
     
  • Sauvegarde à la main : 
    On sauvegarde le répertoire files :
    cp -R sites/default/files ../backup_files

    On sauvegarde la base de données :
    drush sql:dump
  • Sauvegarde par scripts comme par exemple celui décrit dans un de mes articles précédent sur la sauvegarde et la restauration d'un Drupal 8.
     

 

2. Etat des lieux des mises à jour

Pour vérifier l'état global du projet avec les packages :

composer outdated

Pour voir simplement ce qui est lié au projet sans voir les dépendances aux packages : 

composer outdated --direct

 

Pour vérifier les updates de Drupal core et modules :

composer outdated 'drupal/*'

 

3. Upgrade du core ou d'un module

Pour Upgrader le Core :

composer update drupal/core* --with-dependencies

 

Pour Upgrader les modules c'est le même principe : 

composer update drupal/NOM_DU_MODULE

ou

composer update drupal/NOM_DU_MODULE --with-dependencies

Cette commande est utilisé pour mettre à jour une version mineur.

 

Pour upgrader dans une version majeure on utilise d'abord la commande suivante (exemple pour passer de la version 1.x à 2.x): 

composer require drupal/modulename:^2.0

Puis on fait une update de module comme ci-dessus.

 

A la suite de la mise à jour du core ou d'un module, on upgrade le schéma de la BDD de Drupal, on supprime le cache et on exporte les éventuels changements de config :

drush updatedb
drush cache:rebuild
drush config:export --diff

On peut aussi faire ça en http en visitant la page /update.php du site sur un navigateur mais ce n'est pas recommandé au vue des limites de mémoire et timeout liées au serveur web.


 

4. Upgrader la production

Voici la petite check list pour update la production : 

  1. On active le mode maintenance sur le site de façon à arrêter toutes transaction et prévenir les utilisateurs du site :
    drush state:set system.maintenance_mode 1 
    drush cache:rebuild
  2. On aura fait les update au préalable sur un environnement de test.
    On pull le composer.json et composer.lock sur la production avec donc toutes les nouvelles versions du core, des modules et des dépendances.
     
  3. On installe les nouvelles versions :
    composer install --no-dev

    préférable à un "composer update" pour la production.

  4. On met à jour le schéma de base de données :

    drush updatedb
  5. On vérifie que le site fonctionne bien en faisant quelques manips simples et en vérifiant au niveau des logs si on a pas de nouvelles erreurs ou warnings.
     
  6. Si tout est ok, on retire le site du mode maintenance et on supprime le cache :
    drush state:set system.maintenance_mode 0
    drush cache:rebuild
  7. Dernière vérification en utilisateur anonyme pour être sur que tout est bien ok.

 

Problème possible lors d'une update

Lors d'une mise à jour si drupal/core ne se met pas à jour cela peut être du à une dépendance qui bloque l'update.

On peut alors utiliser la commande suivante :

composer prohibits

identique à la commande composer why-not qui permet de voir ce qui bloque au niveau des dépendances.

Exemple si on souhaite upgrader Drupal de la 8.4.5 à la 8.5.0, on lance la commande suivante : 

composer prohibits drupal/core:8.5.0

qui va nous lister les bloquants. 

Et pour résoudre le problème, si c'est Symfony qui coince, on lance : 

composer update drupal/core "symfony/*" --with-dependencies

 

L'auteur de cet article
Julien Krier
Responsable Digital, ayant occupé différents postes en informatique depuis 2001, Julien Krier a travaillé sur de multiples plateformes, sites de contenu ou e-commerce à fort trafic. Il est spécialisé dans les technologies web sur les CMS comme Drupal et les Framework Php comme Symfony.
Cet article vous a aidé?
Average: 5 (1 voter)
Partagez cet article
Articles sur le même sujet
Patcher un module de DrupalIl peut arriver que sur une mise à jour par exemple on se retrouve avec un bug sur un module. Des patchs peuvent alors corriger le problème.
Configurer son environnement de DEV pour Drupal 8Avant de commencer à modifier une instance de Drupal 8 et notamment pour faire le thème du site, il faut configurer son environnement de développement.
hook_help() : créer une page d'aide pour un module en Drupal 8Pour développer de bons modules pérennes, il est important d'avoir des informations ou de la documentation sur le fonctionnement du module ou son installation. Pour enregistrer ces informations on implémente le hook_help().