Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in produzione

53

Transcript of Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in produzione

Page 1: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione
Page 2: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Drupal 8: dal download del core alla pubblicazione in produzioneCos’è cambiato rispetto a Drupal 7

Page 3: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Chi sono

Vincenzo Di Biaggio@vincenzodb

Software Developer @SparkFabrik - MilanoDrupal Social Club https://www.facebook.com/sparkfabrik/

Software: https://github.com/vincenzodibiaggioVideogiochi: http://steamcommunity.com/id/vincenzodb/Foto: https://500px.com/vincenzodbMusica: http://www.last.fm/it/user/vincenzodb

Page 4: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Scaletta

- La “rivoluzione” Drupal 8 ha portato con se

- La gestione del Core di Drupal come dipendenza

- Il Configuration Management System

- I Moduli espongono le proprie configurazioni nativamente su file di testo

Page 5: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Configurazione?

“A configuration is neither cache or content, but everything that is left”

@alexpott

Page 6: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Scaletta

- La “rivoluzione” Drupal 8 ha portato con se

- Il Configuration Management System

- I Moduli espongono le proprie configurazioni nativamente su file di testo

- Come cambiano le nostre Feature

- Il nostro modulo non conterrà più le configurazioni dei moduli

- Le feature organizzeranno le configurazioni

- Mediante i bundle potremo pubblicare un set di funzionalità replicabili

Paolo Pustorino
In che senso organizzeranno?
Paolo Pustorino
Suggerimento Se i bundle sono i risultati delle features potresti riscrivere questa riga come "Le feature organizzeranno le nostre configurazioni in bundle"
Vincenzo Di Biaggio
Non per forza bisogna creare i bundle
Page 7: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Scaletta

- La “rivoluzione” Drupal 8 ha portato con se

- Il Configuration Management System

- I Moduli espongono le proprie configurazioni nativamente su file di testo

- Come cambiano le nostre Feature

- Il nostro modulo non conterrà più le configurazioni dei moduli

- Le feature organizzeranno le configurazioni

- Mediante i bundle potremo pubblicare un set di funzionalità replicabili

- Organizzazione degli ambienti e replicazione della configurazione

- Organizzazione delle dipendenze applicative con Docker

- Sistema di build

- Automatizzazione della pubblicazione

Page 8: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

La “rivoluzione” Drupal 8

Il Configuration Management System

Esportazione / Importazione configurazione

Esportazione / Importazione singoli componenti

Gestione degli override della configurazione

Page 9: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

CMS - File di configurazioneuuid: 2f915dc3-f384-4e14-a700-d06c3f8e47d7langcode: enstatus: truedependencies: { }id: authenticatedlabel: 'Authenticated user'weight: 1is_admin: falsepermissions: - 'access content' - 'use text format basic_html' - 'access comments' - 'post comments' - 'skip comment approval' - 'access site-wide contact form' - 'access shortcuts' - 'search content'

user.role.authenticated.yml

Page 10: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima

Modulo: Drupal Day 2015

Content type: Drupal Day Article

Title

Body

Image

Category - Taxonomy Vocabulary Drupal Day Taxonomy

Paolo Pustorino
Non capisco l'evidenziazione
Vincenzo Di Biaggio
Uhm per indicare una risorsa esterna al contengono type e risparmiare unaslide per mostrare la tassonomia
Page 11: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 2

Modulo: Drupal Day 2015

View

Last Entries

Content Type: Drupal Day Article

Menu Item

Last Entries

Page 12: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Premesse

● Replicazione delle funzionalità su vari ambienti

● Facilità di pubblicazione

Page 13: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 7

Configurazione nel Database

Nessuna gestione della configurazione per poterla esportare / importare / replicare

Ripetizione delle azioni di configurazione del core e dei moduli in stage / produzione per poter replicare le funzionalità

Page 14: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Modulo Features

Drupal 7

Esportazione dei valori di configurazione dei componenti del core

Esportazione dei valori di configurazione dei componenti dei moduli contrib o custom che espongono la propria configurazione

Organizzazione delle configurazioni esportate all’interno di moduli custom

Abilitazione del modulo contenente le feature = replicazione delle feature

Page 15: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione
Page 16: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

● Gestisce la configurazione di una installazione Drupal

○ Proprietà dei componenti

○ Variabili

○ Override dei valori

● Esportazione / Importazione configurazione

● Sincronizzazione della configurazione

● Gli sviluppatori non devono far altro che dichiarare le configurazioni di un modulo (obbligatorio comunque per falo funzionare)

● Esportazione + importazione in remoto = replicazione delle feature

Page 17: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

DEFAULT SU DATABASE

Page 18: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

sites/default/services.yml

services: config.storage: class: Drupal\Core\Config\CachedStorage arguments: ['@config.storage.active', '@cache.config'] config.storage.active: class: Drupal\Core\Config\FileStorage factory: Drupal\Core\Config\FileStorageFactory::getActive

Page 19: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

sites/default/settings.php

$config_directories = array( CONFIG_ACTIVE_DIRECTORY => './../config/active/', CONFIG_SYNC_DIRECTORY => './../config/sync/',);

$settings['bootstrap_config_storage'] = array( 'Drupal\Core\Config\BootstrapConfigStorageFactory', 'getFileStorage');

Page 20: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

Variabili

# Drupal 7variable_set('var', 'Value');variable_get('var', 'Default value');variable_del('var');

Page 21: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

Overrides / 1

# settings.php# $config[NOME_FILE][VARIABILE]$config['system.maintenance']['message'] = 'Sorry, our site is down now.';

Page 22: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

Overrides / 2

// Remember original language before this operation.$original_language = \Drupal::configFactory()->getLanguage();$language = language_load($account->getPreferredLangcode());\Drupal::configFactory()->setLanguage($language);$mail_config = \Drupal::config('user.mail');// Now send email based on $mail_config which is in the proper language.// Set back the language to the prior value.\Drupal::configFactory()->setLanguage($original_language);

Page 23: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

Overrides / 3

# Valori originali della configurazione$site_name = \Drupal::config('system.site')->getOriginal('name', FALSE);

Page 24: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

Overrides / 4

# Overrides permanentipublic function loadOverrides($names) { $overrides = array(); if (in_array('system.site', $names)) { $overrides['system.site'] = ['name' => 'Overridden site name!']; }

return $overrides;}

Page 25: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Gestisce la configurazione di una installazione Drupal

Overrides / 5

# Documentazionehttps://www.drupal.org/node/1928898

Page 26: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Esportazione / Importazione della configurazione

# Drush - http://www.drushcommands.com/drush-7x/config//bin/drush config-export/bin/drush config-import

# Drupal Console - http://drupalconsole.com//bin/console config:export/bin/console config:import

Page 27: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Esportazione / Importazione della configurazione /

# Interfaccia/admin/config/development/configuration/full/export/admin/config/development/configuration/full/import

Page 28: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Gestione della configurazione

Drupal 8

Sincronizzazione della configurazione

# Interfaccia/admin/config/development/configuration

Differenze tra la configurazione active e quella presente nella directory sync

Page 29: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Modulo Features

Drupal 8

(Dato che) Drupal 8 si occupa del lavoro di replicazione delle funzionalità

Il modulo Features si occupa dell’organizzazione delle funzionalità per poterle gestire attraverso i moduli

Creazione e gestione di bundle per replicare le funzionalità utilizzando un set di configurazioni

Page 30: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 3

Modulo: Drupal Day 2015

Creazione - Esportazione Content Type Drupal Day Article

Creazione - Esportazione Tassonomia Drupal Day Taxonomy

Creazione - Esportazione Vista “Last Entries”

Creazione - Esportazione Menu Item “Last Entries”

Page 31: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 4

Content Type Drupal Day Articlenode.type.drupal_day_article.yml

uuid: 3005e153-6382-4173-920c-1232ba898c9dlangcode: enstatus: truedependencies: ....name: 'Drupal Day Article'type: drupal_day_articledescription: ''help: ''new_revision: falsepreview_mode: 1display_submitted: true

Page 32: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 5

Tassonomia Drupal Day Taxonomytaxonomy.vocabulary.drupal_day_2015_taxonomy.yml

uuid: 09f00b65-1880-47d1-b001-1e42cadf8c43langcode: enstatus: truedependencies: { }name: 'Drupal Day 2015 Taxonomy'vid: drupal_day_2015_taxonomydescription: 'Drupal Day 2015 Taxonomy'hierarchy: 0weight: 0

Page 33: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 6

Vista “Last Entries”views.view.last_entries_drupal_day_2015.yml

uuid: eefbb1b8-9b34-4590-a000-de4247c4c335langcode: enstatus: truedependencies: config:

- core.entity_view_mode.node.teaser

- node.type.drupal_day_article- system.menu.main

module:- node- user

id: last_entries_drupal_day_2015label: 'Last Entries Drupal Day 2015'module: views

base_table: node_field_database_field: niddisplay: default:

display_plugin: defaultid: defaultdisplay_title: Masteraccess:type: permoptions:

perm: 'access content' [....] items_per_page: 10

Page 34: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 7

Menu Item “Last Entries”views.view.last_entries_drupal_day_2015.yml

page_1: display_plugin: page id: page_1 display_title: Page position: 1 path: last-entries-drupal-day-2015 menu: type: normal title: 'Last Entries Drupal Day 2015' menu_name: main

Page 35: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 8

Replicazione delle funzionalità

Features

1. Creazione Bundle

2. Creazione Feature

3. Esportazione

https://www.drupal.org/node/2404427

Page 36: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 8

Features - Creazione Bundle/admin/config/development/configuration/features/bundle

Page 37: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 8

Features - Creazione Feature/admin/config/development/configuration/features

Drush support

features-add features-components features-diff features-export features-import features-list-packages features-status

https://www.drupal.org/node/2624004

Page 38: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 9

Features - Creazione Feature 2/admin/modules

Page 39: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 9

Features - Esportazione Feature/modules/custom/drupal_day_2015_drupal_day_article

modules/custom/drupal_day_2015_drupal_day_article tree▶├── config│ ├── install│ │ ├── core.entity_form_display.node.drupal_day_article.default.yml│ │ ├── core.entity_view_display.node.drupal_day_article.default.yml│ │ ├── core.entity_view_display.node.drupal_day_article.teaser.yml│ │ ├── field.field.node.drupal_day_article.body.yml│ │ ├── field.field.node.drupal_day_article.field_category.yml│ │ ├── field.field.node.drupal_day_article.field_image_dd.yml│ │ └── node.type.drupal_day_article.yml│ └── optional│ └── views.view.last_entries_drupal_day_2015.yml└── drupal_day_2015_drupal_day_article.info.yml

3 directories, 9 files

Page 40: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Con gli esempi si fa prima / 9

Features - Contenuto Feature/modules/custom/drupal_day_2015_drupal_day_article/config/install

modules/custom/drupal_day_2015_drupal_day_article/config/install cat ▶node.type.drupal_day_article.ymllangcode: enstatus: truedependencies: module:

- menu_uithird_party_settings: menu_ui:

available_menus:- mainparent: 'main:'

name: 'Drupal Day Article'type: drupal_day_articledescription: ''

help: ''new_revision: falsepreview_mode: 1display_submitted: true

Page 41: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

… replichiamo per N volte ...

Page 42: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Organizzazione dell’ambiente

Assunzioni

● Team con ambienti eterogenei

● Differenti dipendenze applicative a seconda degli ambienti(versione PHP/Mysql - Apache/NGINX, ecc)

Risolvere questo tipo di problemi non è il mio lavoro

Page 43: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Organizzazione con Docker

Docker

https://www.docker.com

Page 44: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Organizzazione dell’ambiente con Docker

Docker-composehttps://docs.docker.com/compose/

data: image: sparkfabrik/docker-drupal-data hostname: data volumes:

- /data- /var/lib/mysql

mysql: image: sparkfabrik/docker-mysql hostname: mysql environment:

- MYSQL_ROOT_PASSWORD=root

Utilizzo di immagini “preconfezionate”

https://github.com/sparkfabrikhttps://hub.docker.com/

Page 45: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Organizzazione dell’ambiente con Docker

Docker-compose / 2cat docker-compose.yml

data: extends:

file: docker-common-services.ymlservice: data

mysql: extends:

file: docker-common-services.ymlservice: mysql

ports:- "13306:3306"

volumes_from:- data

Differenti immagini = ● Differenti versioni dei software● “Switch” tra le versioni in tempo 0● Coesistenza di differenti versioni dello stesso

applicativo

Page 46: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Sistema di build

Phing

https://www.phing.info/

PHing Is Not GNU make; it's a PHP project build system or build tool

Page 47: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Sistema di build

Phing

<target name="generate-ci-settings" if="env"> <loadfile property="settings.${env}" file="base_files/${env}.settings.php.dist"/> <echo msg="${settings.${env}}" file="web/sites/${settings.directory.destination}/settings.php" append="true" /> <copy file="web/sites/${settings.directory.destination}/settings.php" tofile="web/sites/${settings.directory.destination}/settings.php.temp" /> <exec command="rm web/sites/${settings.directory.destination}/settings.php" /> <copy file="web/sites/${settings.directory.destination}/settings.php.temp" tofile="web/sites/${settings.directory.destination}/settings.php"> <filterchain> <replacetokens begintoken="%%" endtoken="%%"> <token key="SETTINGS_INSTALL_PROFILE" value="${site.profile}" /> <token key="DB_NAME" value="${db.name}" /> </replacetokens> </filterchain> </copy> <exec command="rm web/sites/${settings.directory.destination}/settings.php.temp" passthru="true"/></target>

Page 48: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Sistema di pubblicazione

Capistrano

http://capistranorb.com/

A remote server automation and deployment tool written in Ruby.

Page 49: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Sistema di pubblicazione

Capistrano

namespace :build do desc "Install app" task :do do on roles(:app) do

invoke 'deploy' invoke 'drushistrano:composer:install' invoke 'drushistrano:phing:build' end end

end

# cap stage build:do

Page 50: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Perchè automatizzare

Maggiore è l’intervento manuale, maggiori sono le possibilità di errore

I rilasci possono essere eseguiti da tutti (con le dovute accortezze)

I rilasci possono essere automatizzati

Commit branch feature

Merge request branch feature verso develop

Build automatica

Test

Test OK

Merge in develop

Test

Test OK

Pubblicazione automatica in stage

Page 51: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Progetto Drupal 8 base

https://github.com/vincenzodibiaggio/drupal8_base

● Servono tester

● Chiunque può contribuire

Se ti piace l’idea ma pensi di non “essere in grado” contattami!

Page 52: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione

Grazie

Vincenzo Di Biaggio@vincenzodb

Software Developer @SparkFabrik - MilanoDrupal Social Club https://www.facebook.com/sparkfabrik/

Page 53: Drupal Day 2015 -  Drupal 8  dal download del core alla pubblicazione in produzione