Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

43

Transcript of Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

Page 1: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Page 2: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CMI e Features per D8SVILUPPO CODE-DRIVEN E RIUSABILITÀ DEL CODICE:

Speaker: Adriano Cori @bmeme

Page 3: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

Di cosa parleremo

CONFIGURATION MANAGEMENT INITIATIVE1PRESENTAZIONE

GESTIONE DELLE CONFIGURAZIONI

WORKFLOW DI SVILUPPO IN DRUPAL

IL RUOLO DI FEATURES IN DRUPAL 8

ESEMPI DI UTILIZZO DEL CMI

Page 4: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

Le novità di Drupal 8

ALCUNI DEI CAMBIAMENTI PIÙ IMPORTANTI:2INTRODUZIONE

• Symfony2 • YAML • Twig • Entity • hook_skywalker• Nuovi moduli Core

Page 5: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

Le novità di Drupal 8

IL CALCIOMERCATO DELLA “DRUPAL CORE F.C.”2INTRODUZIONE • Entity reference

• Entity translation • Migrate • UUID • Views • VBO • …

• Nuovi moduli Core

• Features ?

Configur

ation

Manageme

nt Initi

ative

Page 6: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

Keep calm and

Drupal ottoottoosho

Page 7: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURATION MANAGEMENT INITIATIVE

IN COSA CONSISTE PRATICAMENTE?3CMI

E’ lo strumento che ci consente di gestire le configurazioni della nostra istanza Drupal, dandoci la possibilità di tracciarne i cambiamenti e di rilasciarle nei vari ambienti dell’applicazione.

configurazioni

Page 8: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

VARIABLES

3CMI

Drupal 7 consente di memorizzare dati più o meno complessi all’interno della tabella variable sotto forma di valori serializzati (value) identificabili da una chiave (name).

Le operazioni di CRUD delle variabili sono rese disponibili da queste tre funzioni:

• variable_set($name, $value);• variable_get($name, $default_value);• variable_del($name);

configurazioni

Page 9: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

3CMIconfigurazioni

Page 10: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

VARIABLES

3CMI

In Drupal 7 le configurazioni possono essere gestite nei seguenti modi: - manualmente - hook_install() / hook_update_N() - settings.php - Features

configurazioni

Page 11: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

GESTIONE MANUALE

3CMI

Consiste nel riportare nei vari ambienti dell’applicazione ogni configurazione che è stata fatta nel proprio ambiente di sviluppo locale.configurazioni

“Ma piuttosto cambio lavoro!”

• Error-prone • Impossibilità di tener

traccia dei cambiamenti

• All’aumentare delle configurazioni da apportare, aumenta l’effort

Page 12: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

HOOK_INSTALL() / HOOK_UPDATE_N()

3CMI

Consiste nel settare il valore di una o più variabili in fase di installazione del proprio modulo oppure quando si esegue lo script di aggiornamento update.php

configurazioni

“Vabbè ma famme un esempio pratico su”

Page 13: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

3CMIconfigurazioni

“Ma piuttosto cambio lavoro!”

Page 14: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

GRANDI POTENZIALITÀ MA CI SONO DEI CONTRO:

3CMI

- per le variabili più complesse (views, fields, ecc..) l’export potrebbe risultare non così semplice.

- necessità di un developer per poter esportare le configurazioni sul codice.

- rischio di avere una serie infinita di hook_update_N() all’interno del mio file *.install per gestire eventuali aggiornamenti delle configurazioni.

- impossibilità di tracciare eventuali modifiche apportate dagli utenti del sito rispetto alle configurazioni riportate sul codice.

configurazioni

Page 15: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

SETTINGS.PHP

3CMI

E’ possibile settare il valore di qualsiasi variabile all’interno del file settings.php, utilizzando l’array $conf, andando così a sovrascrivere i valori precedentemente salvati sul database.

configurazioni

Page 16: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

SETTINGS.PHP

3CMI

- utile quando si vuol configurare un set di variabili in base all’ambiente in cui ci si trova.

- necessità di un developer per poter esportare le configurazioni all’interno del file.

configurazioni

“Ma mo’ che è sta zozzeria?”

Page 17: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

“Ma piuttosto cambio lavoro!”

CONFIGURAZIONI IN DRUPAL 7

Page 18: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

FEATURES

3CMIconfigurazioni

Page 19: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 7

FEATURES

3CMI

Features è un modulo contrib che nasce con l’intento iniziale di racchiudere, all’interno di unità funzionali, un set di configurazioni da poter riutilizzare su istanze diverse di Drupal.

E’ diventato, in realtà, un modulo che genera moduli, all’interno dei quali vengono messe le configurazioni del nostro sito e che ci offre la possibilità di tener traccia dei cambiamenti avvenuti su tali configurazioni.

E’ il sistema di gestione delle configurazioni più utilizzato su Drupal 7 (per mancanza di alternative).

configurazioni

Page 20: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

CONFIGURATIONS

3CMI

Drupal 8 consente di memorizzare dati più o meno complessi all’interno della tabella config sotto forma di valori serializzati (data) identificabili da una chiave (name) ed un raggruppamento (collection).

COSA CAMBIA • Le configurazioni in Drupal 8 possono essere

memorizzate su files invece che sul DB • I file di configurazione sono scritti in formato

YAML (.yml) • Possibilità di tener traccia dei cambiamenti

utilizzando sistemi di versioning del codice

configurazioni

Page 21: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

3CMIconfigurazioni

Page 22: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

3CMIconfigurazioni

CONFIGURATION STORAGE MECHANISMS

DatabaseStorage

FilesystemStorage

Active config config/active

Sync config/sync config/sync

Staging config/staging

active: contiene le configurazioni attualisync: contiene le configurazioni che devono essere sincronizzate con active

Page 23: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

3CMIconfigurazioni

“Ma piuttosto cambio lavoro!”

CONFIGURAZIONI IN DRUPAL 8

DATABASE STORAGE MECHANISM

Page 24: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

FILESYSTEM STORAGE MECHANISM

Page 25: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

STORAGE MECHANISMSMSMSMSMS

Page 26: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

DRUPAL 8 INTRODUCE NUOVI TIPI DI CONFIGURAZIONI:

3CMI

• Simple configurations (config_object) • Sono quanto di più avvicinabile al sistema di variabili di

Drupal 7. • Sono oggetti configurativi per la gestione di

impostazioni di base che risultino in valori booleani, interi, stringhe ecc.

• Configuration Entities (config_entity) • Memorizzano oggetti configurativi creati dagli utenti

del sito (es: “image style”) • State API

• Sono le configurazioni che memorizzano informazioni sullo stato del sistema.

• Non abbiamo interesse a rilasciarle su ambienti diversi (es: la data dell’ultimo passaggio del cron)

configurazioni

Page 27: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

3CMIconfigurazioni

OGNI MODULO PUÒ DEFINIRE LE PROPRIE CONFIGURAZIONI

install e schema sono le directory che fanno al caso nostro

Page 28: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

CONFIG FILE

3CMIconfigurazioni

SCHEMA FILE

Page 29: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIG FILE

SCHEMA FILE

Page 30: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIG FILE

SCHEMA FILE

Page 31: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURAZIONI IN DRUPAL 8

3CMIconfigurazioni

SCHEMA FILE

“The primary reason schema files were introduced into Drupal 8 is multilingual

support. A tool was needed to identify all translatable strings within the shipped

configuration.

The secondary reason is to provide actual translation forms for configuration based on your data and to expose translatable configuration pieces to external tools.”

- fonte: Drupal 8 Configuration Management -

…PERCHÉ?

Page 32: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURATION OBJECTS• accessibili tramite il servizio configFactory • per accedere in modifica alle configurazioni bisogna

caricare la versione modificabile del file. • clear() rimuove un elemento dal config_object. • save() non deve essere mai chiamato dopo il delete() • delete() cancella l’intero config_object

CONFIGURAZIONI IN DRUPAL 8

• \Drupal::config($name) == \Drupal::configFactory()->get($name)

Page 33: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

CONFIGURATION ENTITIES• entity_load(), entity_create(), entity_save(),

ecc sono tutte funzioni deprecate • si accede alle istanze delle entity sfruttando

il metodo statico ::load() • get() set() e delete() vi ricordano qualcosa?

CONFIGURAZIONI IN DRUPAL 8

Page 34: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

4WORKFLOW DI SVILUPPO IN DRUPAL

Building Development

Configurations Management

Packaging

Deploy

Configurations Management

WORKFLOW DI SVILUPPO IN DRUPAL

D7

FeaturesFeature create/update

Deploy

Feature revert

Page 35: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

COME UTILIZZARE ACTIVE E SYNC

active sync

exportdevelopment

active sync

importproduction

Deploy

4WORKFLOW DI SVILUPPO IN DRUPAL

WORKFLOW DI SVILUPPO IN DRUPAL

Building Development

Page 36: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

4WORKFLOW DI SVILUPPO IN DRUPAL

PURTROPPO LA VITA VERA È UN’ALTRA COSA…

WORKFLOW DI SVILUPPO IN DRUPAL

Page 37: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

possibile soluzione PURTROPPO LA VITA VERA È UN’ALTRA COSA…

WORKFLOW DI SVILUPPO IN DRUPAL

Page 38: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

ALLINEARE SVILUPPO CON PRODUZIONE

active sync

export

development

active sync

import

production

Download Export

4WORKFLOW DI SVILUPPO IN DRUPAL

WORKFLOW DI SVILUPPO IN DRUPAL

Page 39: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

La domanda sorge spontanea…

“Ho capito ma… e mo’ co Ficiur che ce faccio?!”

5IL RUOLO DI FEATURES IN DRUPAL 8

Page 40: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

IL RUOLO DI FEATURES IN DRUPAL 8

FEATURESFeatures è un modulo contrib che nasce con l’intento iniziale di racchiudere, all’interno di unità funzionali, un set di configurazioni da poter riutilizzare su istanze diverse di Drupal.

E’ diventato, in realtà, un modulo che genera moduli, all’interno dei quali vengono messe le configurazioni del nostro sito e che ci offre la possibilità di tener traccia dei cambiamenti avvenuti su tali configurazioni.

E’ il sistema di gestione delle configurazioni più utilizzato su Drupal 7 (per mancanza di alternative).

5IL RUOLO DI FEATURES IN DRUPAL 8

Page 41: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8

ESEMPI DI UTILIZZO DEL CMI

Nei seguenti esempi, dati due ambienti completamente identici, che chiameremo Development e Production, vedremo come funziona in pratica il flusso di lavoro descritto precedentemente, in entrambe le direzioni (dev -> prod; prod -> dev)

6ESEMPI DI UTILIZZO DEL CMI

“Daje va, famme sogna’…”

Page 42: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Page 43: Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8