Accélérer l'administration de son site drupal avec Makefile

Make

Un Makefile est un fichier contenant des rules, (des fonctions) permettant d’exécuter une suite d'action. Beaucoup utilisé dans les langages compilés pour permettre de gérer la compilation d'un programme, c'est aussi utilisable dans le cadre d'un projet php.

J'ai découvert les Makefile après avoir commencé à utiliser docker pour mes projets web.

Quand on utilise docker pour le php les binaires php (drush, composer, drupal-console...) sont à exécuter dans le container php et non pas sur notre machine hôte.

Ce qui donne des commandes ressemblant à :

docker-compose exec php drush cr
docker-compose exec php composer install

au lieu de simples

drush cr
composer install

ça n'est pas la mort, mais un développeur est feignant.

L'ensemble d'images docker docker4drupal propose un Makefile avec des rules permettant d’exécuter drush ou composer plus simplement :

make drush cr
make composer install

C'est très pratique, mais on peut aller encore plus loin et écrire nos propres rules en les ajoutant à la suite du fichier. Voici par exemple une rules pour supprimer la base de données et la recréer :

## db-empty	: drop and recreate database
.PHONY: db-empty
db-empty:
	@docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "DROP DATABASE IF EXISTS $(DB_NAME)"
	@echo Database $(DB_NAME) dropped
	@docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "CREATE DATABASE $(DB_NAME)"

Un autre exemple pour afficher en continu le contenu du fichier drupal_debug.txt (voir : Drupal - Découvrez la fonction ddm, pour débuguer même en aveugle) :

## dd-tail	: show the tail of drupal-debug.txt file
.PHONY: dd-tail
dd-tail:
	tail -f $(LOCAL_TMP_PATH)/drupal_debug.txt

Vous voyez ici l'utilisation de variables, comme $(DB_HOST) qui sont définies dans le fichier .env :

Image
.env variables

À force d'ajouter des rules au fur et a mesure, j'ai finis par en avoir pas mal. J'ai fais un petit boulot de généralisation et tout est maintenant sur un dépôt github : https://github.com/kgaut/drupal-makefile.

L'installation est relativement rapide est simple :

Ajoutez le package à vos dépendances

composer require kgaut/drupal-makefile

Modifiez votre fichier .env et ajoutez les variables nécessaires présentées ici : https://github.com/kgaut/drupal-makefile/blob/master/.env.example

Si vous n'avez pas d'environnement de prod ou de preprod, vous pouvez supprimer les variables correspondantes ou bien les garder pour plus tard.

Enfin, il faudra lier ce nouveau fichier makefile à votre fichier makefile principal, à la racine de votre projet, en ajoutant après la ligne include .env, la ligne suivante :

include vendor/kgaut/drupal-makefile/drupal.mk

Les différentes rules sont présentées ici : https://github.com/kgaut/drupal-makefile#availables-rules

Une que j'utilise régulièrement est : db-prod-import qui fait en fait appel à plein d'autres rules :

  1. Suppression de la base de données local et récréation (via db-empty)
  2. Récupération du dump de base de données le plus récent en prod (via db-prod-get)
  3. Import de ce dump en local (db-import)
  4. Vidage des cache, mises à jour de base de données, import de la configuration et affiche un lien de connexion en tant qu'utilisateur 1 (via db-post-import)

Évidement tout ça est très lié à mon organisation de projet, mais vous pouvez certainement en récupérer des idées ou de l'inspiration.

N'hésitez-pas à suggérer des modifications ou des améliorations !

Contenus en rapport

Utiliser une image docker pour exécuter les tâches Node / Gulp en dev ou CI

En ayant marre d'avoir à gérer x versions de de NodeJS sur ma machine avec pour chacune ses dépendances et incompatibilités, et de devoir se souvenir pour chaque projet quelle version utiliser, j'ai fini par externaliser cette gestion à docker, comme je le fais déjà depuis longtemps pour php, mysql, SolR...

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...