Sviluppo siti Drupal 8, git, drush e configuration management: continuous integration senza stress
L’avvento di Drupal 8 ha portato grandi novità anche per chi si occupa di sviluppo siti Drupal. Una di queste riguarda la semplicità con cui ora si può gestire l’intero ciclo di vita di un sito o di una web application in contesti di continuous integration.
È buona norma evitare di apportare delle modifiche direttamente su un sito live senza che queste siano state preventivamente testate su un ambiente separato. Per questo motivo solitamente esistono più istanze dello stesso sito presenti contemporaneamente in location quasi sempre diverse, e in diverse fasi di sviluppo:
-
Le istanze sui PC degli sviluppatori coinvolti nel progetto, dove avvengono gli sviluppi di nuove funzionalità
-
Il sito “test”, sul quale vengono apportate e testate le modifiche prima della messa in produzione
-
Il sito “live”, sul server di produzione, con i contenuti più aggiornati, gli utenti registrati etc.
Per chi si intende di sviluppo siti Drupal, saprà bene che migrare le modifiche sui file sorgenti non è mai stato un problema da quando esistono sistemi di source code versioning, ma qualsiasi sito o applicazione web che si basa su CMS ha un’altra componente fondamentale coinvolta pesantemente nella maggior parte delle modifiche o implementazioni di nuove funzionalità in un sito web: il database.
Il database del sito “live” non si può semplicemente sostituire con quello di un sito di sviluppo o di test: tutti i dati inseriti sul sito dagli utenti nelle ultime ore, giorni o mesi (articoli, commenti, ordini nel caso di un sito eCommerce, etc.) verrebbero persi. Lanciando il comando “git pull” su un qualsiasi ambiente, tutti i nuovi file vanno a sostituire quelli precedenti, ma le modifiche al database devono essere trasferite in modo opportuno tra i vari ambienti.
Strutture dati note a chi si occupa di content building/sviluppo siti Drupal 8 quali content type, block type, tutte le impostazioni sotto Admin->Configuration e Admin->Appearance, views sono memorizzate nel database. Come si possono trasferire agevolmente e in modo automatico da una istanza ad un’altra?
In Drupal 7 a questo risultato ci si poteva giungere tramite il modulo Features e una serie di moduli da cui dipende, ma i benefici nell’utilizzare questa funzionalità spesso venivano superati da alcune limitazioni intrinseche della soluzione.
Mentre se si opta per lo sviluppo siti in Drupal 8 invece esiste una soluzione elegante che rende la migrazione delle configurazioni tra ambienti un’operazione rapida ed efficiente: si chiama Configuration Management.
Per sfruttare appieno le potenzialità del Configuration Management occorre impostare correttamente gli ambienti fin dall’inizio di un progetto. Il seguito dell’articolo illustra a grandi linee la procedura da noi seguita nel set-up di un nuovo progetto Drupal 8.
Ecco gli strumenti che dovranno essere presenti su ogni macchina per lo sviluppo siti in Drupal 8:
Si assume anche di avere a disposizione un git repository nel quale caricare il nuovo progetto.
Dopo aver effettuato il checkout di Drupal 8 sulla macchina di lavoro, si procede a lanciare il comando “composer install” per installare il software.
Potrebbe essere utile fin da subito creare diversi “branch” di sviluppo sui quali è possibile intervenire singolarmente.
Prima di effettuare il push del codice sul repository è consigliato intervenire per evitare che alcuni file vadano a finire sul repository. Generalmente la cartella /sites/default/files non deve essere trasferita su Git in quanto i file in essa contenuti sono dipendenti da ogni sito. Stesso discorso vale per il file settings.php. Questo si ottiene con la creazione del file .gitignore nella root del sito, contenente l’elenco dei file e delle cartelle che non devono essere trasferite sul repository.
A questo punto è giunto il momento di utilizzare le potenzialità del Configuration Management. In nostro aiuto interviene Drush, il compagno fidato di chiunque si occupi di sviluppo siti Drupal. I comandi da utilizzare per il nostro scopo sono: drush cex e drush cim.
Questi due comandi servono a gestire l’esportazione e l’importazione delle configurazioni dell’applicazione in file in formato yaml.
Prima di entrare nello specifico è utile ricordare che, nello sviluppo di siti Drupal 8, per far funzionare questo sistema è necessario reimpostare la cartella “Sync”, dentro la quale sono storati i suddetti files, al livello della root del sito e quindi fuori dalla cartella web di Drupal. Per far ciò nel file settings.php aggiungere le seguenti righe di codice (commentando/cancellando le corrispondenti esistenti):
# Changing The Storage Location of the Sync Directory
$config_directories{{CONFIG_SYNC_DIRECTORY}} = '../config';
Con il primo comando (drush cex) abbiamo la possibilità di inserire all’interno del pacchetto, durante la fase di creazione del commit, i files di configurazione.
Fatto questo e configurato il file settings.php è tutto pronto per fare il primo push di tutti i file.
Supponendo ora di voler ricreare una nuova installazione del sito su un’altra macchina, sarà sufficiente clonare il repository e lanciare il comando drush cim: questo rende possibile importare le impostazioni che sono state precedentemente committate.
Viene creata una nuova view su un ambiente e la si vuole trasferire su un altro ambiente? Stessa operazione:
Ambiente origine:
drush cex
git push
Ambiente destinazione:
git pull
drush cim
Tramite questo approccio, l’integrazione continua di un sito Drupal 8 diventa un processo lineare, controllato ed estremamente efficace nel seguire tutte le fasi di creazione di web application o sviluppo siti Drupal durante la loro naturale evoluzione.
Hai un nuovo progetto Drupal 8 in partenza e ti serve una consulenza da parte dei nostri esperti in sviluppo siti Drupal per impostarlo fin da subito in modo ottimale? Contattaci ora, siamo a tua disposizione per ascoltare le tue necessità.