SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
Drupal 8: dal download del core alla
pubblicazione in produzione
Cos’è cambiato rispetto a Drupal 7
Chi sono
Vincenzo Di Biaggio
@vincenzodb
Software Developer @SparkFabrik - Milano
Drupal Social Club https://www.facebook.com/sparkfabrik/
Software: https://github.com/vincenzodibiaggio
Videogiochi: http://steamcommunity.com/id/vincenzodb/
Foto: https://500px.com/vincenzodb
Musica: http://www.last.fm/it/user/vincenzodb
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
Configurazione?
“A configuration is neither cache or content, but
everything that is left”
@alexpott
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
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
La “rivoluzione” Drupal 8
Il Configuration Management System
● Esportazione / Importazione configurazione
● Esportazione / Importazione singoli componenti
● Gestione degli override della configurazione
CMS - File di configurazione
uuid: 2f915dc3-f384-4e14-a700-d06c3f8e47d7
langcode: en
status: true
dependencies: { }
id: authenticated
label: 'Authenticated user'
weight: 1
is_admin: false
permissions:
- '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
Con gli esempi si fa prima
Modulo: Drupal Day 2015
Content type: Drupal Day Article
● Title
● Body
● Image
● Category - Taxonomy Vocabulary Drupal Day Taxonomy
Con gli esempi si fa prima / 2
Modulo: Drupal Day 2015
● View
○ Last Entries
○ Content Type: Drupal Day Article
● Menu Item
○ Last Entries
Premesse
● Replicazione delle funzionalità su vari ambienti
● Facilità di pubblicazione
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à
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
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
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
DEFAULT SU DATABASE
Gestione della configurazione
Drupal 8
sites/default/services.yml
services:
config.storage:
class: DrupalCoreConfigCachedStorage
arguments: ['@config.storage.active', '@cache.config']
config.storage.active:
class: DrupalCoreConfigFileStorage
factory: DrupalCoreConfigFileStorageFactory::getActive
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(
'DrupalCoreConfigBootstrapConfigStorageFactory',
'getFileStorage'
);
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Variabili
# Drupal 7
variable_set('var', 'Value');
variable_get('var', 'Default value');
variable_del('var');
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.';
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);
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);
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 4
# Overrides permanenti
public function loadOverrides($names) {
$overrides = array();
if (in_array('system.site', $names)) {
$overrides['system.site'] = ['name' => 'Overridden site name!'];
}
return $overrides;
}
Gestione della configurazione
Drupal 8
Gestisce la configurazione di una installazione Drupal
Overrides / 5
# Documentazione
https://www.drupal.org/node/1928898
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
Gestione della configurazione
Drupal 8
Esportazione / Importazione della configurazione /
# Interfaccia
/admin/config/development/configuration/full/export
/admin/config/development/configuration/full/import
Gestione della configurazione
Drupal 8
Sincronizzazione della configurazione
# Interfaccia
/admin/config/development/configuration
Differenze tra la configurazione active e quella presente nella directory sync
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
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”
Con gli esempi si fa prima / 4
Content Type Drupal Day Article
node.type.drupal_day_article.yml
uuid: 3005e153-6382-4173-920c-1232ba898c9d
langcode: en
status: true
dependencies: ....
name: 'Drupal Day Article'
type: drupal_day_article
description: ''
help: ''
new_revision: false
preview_mode: 1
display_submitted: true
Con gli esempi si fa prima / 5
Tassonomia Drupal Day Taxonomy
taxonomy.vocabulary.drupal_day_2015_taxonomy.yml
uuid: 09f00b65-1880-47d1-b001-1e42cadf8c43
langcode: en
status: true
dependencies: { }
name: 'Drupal Day 2015 Taxonomy'
vid: drupal_day_2015_taxonomy
description: 'Drupal Day 2015 Taxonomy'
hierarchy: 0
weight: 0
Con gli esempi si fa prima / 6
Vista “Last Entries”
views.view.last_entries_drupal_day_2015.
yml
uuid: eefbb1b8-9b34-4590-a000-de4247c4c335
langcode: en
status: true
dependencies:
config:
- core.entity_view_mode.node.teaser
- node.type.drupal_day_article
- system.menu.main
module:
- node
- user
id: last_entries_drupal_day_2015
label: 'Last Entries Drupal Day 2015'
module: views
base_table: node_field_data
base_field: nid
display:
default:
display_plugin: default
id: default
display_title: Master
access:
type: perm
options:
perm: 'access content'
[....]
items_per_page: 10
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
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
Con gli esempi si fa prima / 8
Features - Creazione Bundle
/admin/config/development/configuration/features/bundle
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
Con gli esempi si fa prima / 9
Features - Creazione Feature 2
/admin/modules
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
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.yml
langcode: en
status: true
dependencies:
module:
- menu_ui
third_party_settings:
menu_ui:
available_menus:
- main
parent: 'main:'
name: 'Drupal Day Article'
type: drupal_day_article
description: ''
help: ''
new_revision: false
preview_mode: 1
display_submitted: true
… replichiamo per N volte ...
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
Organizzazione con Docker
Docker
https://www.docker.com
Organizzazione dell’ambiente con Docker
Docker-compose
https://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/sparkfabrik
https://hub.docker.com/
Organizzazione dell’ambiente con Docker
Docker-compose / 2
cat docker-compose.yml
data:
extends:
file: docker-common-services.yml
service: data
mysql:
extends:
file: docker-common-services.yml
service: 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
Sistema di build
Phing
https://www.phing.info/
PHing Is Not GNU make; it's a PHP project build system or build tool
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>
Sistema di pubblicazione
Capistrano
http://capistranorb.com/
A remote server automation and deployment tool written in Ruby.
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
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
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!
Grazie
Vincenzo Di Biaggio
@vincenzodb
Software Developer @SparkFabrik - Milano
Drupal Social Club https://www.facebook.com/sparkfabrik/
Drupal 8 - dal download del core alla pubblicazione in produzione

Mais conteúdo relacionado

Mais procurados

Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziareSalvatore Paone
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Luca Lusso
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Marco Chiesi
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2Giorgio Cefaro
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8DrupalDay
 
Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Kelyon Srl
 
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 frameworkAsync navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 frameworksparkfabrik
 
Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Alessandro del Gobbo
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Kelyon Srl
 

Mais procurados (10)

Drupal - per chi vuole iniziare
Drupal - per chi vuole iniziareDrupal - per chi vuole iniziare
Drupal - per chi vuole iniziare
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
High Performance Web Apps con PHP e Symfony 2
High Performance Web Apps con PHP  e Symfony 2High Performance Web Apps con PHP  e Symfony 2
High Performance Web Apps con PHP e Symfony 2
 
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8[drupalday2017] - DevOps: strumenti di automazione per Drupal8
[drupalday2017] - DevOps: strumenti di automazione per Drupal8
 
Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015
 
Async navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 frameworkAsync navigation with a lightweight ES6 framework
Async navigation with a lightweight ES6 framework
 
TYPO3 CMS 7.6 - Le novita
TYPO3 CMS 7.6 - Le novitaTYPO3 CMS 7.6 - Le novita
TYPO3 CMS 7.6 - Le novita
 
Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013Introduzione a Drupal 7 - 14/03/2013
Introduzione a Drupal 7 - 14/03/2013
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015
 

Semelhante a Drupal 8 - dal download del core alla pubblicazione in produzione

Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8bmeme
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8DrupalDay
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressGGDBologna
 
Drupal come framework di sviluppo
Drupal come framework di sviluppoDrupal come framework di sviluppo
Drupal come framework di sviluppoGrUSP
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletLuca Bartoli
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Wellnet srl
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Eugenio Minardi
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzionegiacomos
 
Bootstrap 3.0 - Introduzione
Bootstrap 3.0 - IntroduzioneBootstrap 3.0 - Introduzione
Bootstrap 3.0 - IntroduzioneMatteo Madeddu
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANODrupalDay
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value compositionOpen Makers Italy
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Matteo Enna
 
PostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillagePostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillageMiriade Spa
 
Drush make vs composer
Drush make vs composer Drush make vs composer
Drush make vs composer sparkfabrik
 
Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018Paolo Galfione
 
Drupal Lessons by nois3lab
Drupal Lessons by nois3labDrupal Lessons by nois3lab
Drupal Lessons by nois3labnois3lab
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsKnowCamp
 
Fare Drupal a linea di Comando
Fare Drupal a linea di ComandoFare Drupal a linea di Comando
Fare Drupal a linea di ComandoDinamicaMente.org
 

Semelhante a Drupal 8 - dal download del core alla pubblicazione in produzione (20)

Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
Sviluppo Code-driven e riusabilità del codice: CMI e Features per D8
 
Creare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpressCreare un tema personalizzato per wordpress
Creare un tema personalizzato per wordpress
 
Drupal come framework di sviluppo
Drupal come framework di sviluppoDrupal come framework di sviluppo
Drupal come framework di sviluppo
 
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver BulletSviluppare plugin per WordPress: Best Practice e Silver Bullet
Sviluppare plugin per WordPress: Best Practice e Silver Bullet
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8Come sfruttare tutte le potenzialità di Symfony in Drupal 8
Come sfruttare tutte le potenzialità di Symfony in Drupal 8
 
Livin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzioneLivin' with Docker - dallo sviluppo alla produzione
Livin' with Docker - dallo sviluppo alla produzione
 
Bootstrap 3.0 - Introduzione
Bootstrap 3.0 - IntroduzioneBootstrap 3.0 - Introduzione
Bootstrap 3.0 - Introduzione
 
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANODrupal Day 2012 - DRUPAL 8:  I CAMBIAMENTI CHE CI ASPETTANO
Drupal Day 2012 - DRUPAL 8: I CAMBIAMENTI CHE CI ASPETTANO
 
Django & Google App Engine: a value composition
Django & Google App Engine: a value compositionDjango & Google App Engine: a value composition
Django & Google App Engine: a value composition
 
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
Drupal diventa un CMF e WordPress che fa? Slide WordCamp Milano 2019
 
PostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillagePostgrSQL 9.3&9.4 - DjangoVillage
PostgrSQL 9.3&9.4 - DjangoVillage
 
Drush make vs composer
 Drush make vs composer Drush make vs composer
Drush make vs composer
 
Drush make vs composer
Drush make vs composer Drush make vs composer
Drush make vs composer
 
Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018Enterprise Applications - Angular Day 2018
Enterprise Applications - Angular Day 2018
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Drupal Lessons by nois3lab
Drupal Lessons by nois3labDrupal Lessons by nois3lab
Drupal Lessons by nois3lab
 
Giovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more thingsGiovambattista Fazioli, 10 more things
Giovambattista Fazioli, 10 more things
 
Fare Drupal a linea di Comando
Fare Drupal a linea di ComandoFare Drupal a linea di Comando
Fare Drupal a linea di Comando
 

Mais de sparkfabrik

KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on KubernetesKCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetessparkfabrik
 
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...sparkfabrik
 
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirtIAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirtsparkfabrik
 
2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pagessparkfabrik
 
2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal frontesparkfabrik
 
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...sparkfabrik
 
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP EcosystemWhat is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP Ecosystemsparkfabrik
 
UX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdfUX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdfsparkfabrik
 
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...sparkfabrik
 
Deep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloudDeep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloudsparkfabrik
 
KCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with CrossplaneKCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with Crossplanesparkfabrik
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue paginesparkfabrik
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernosparkfabrik
 
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)sparkfabrik
 
Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!sparkfabrik
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSsparkfabrik
 
From React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I startedFrom React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I startedsparkfabrik
 
Headless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIsHeadless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIssparkfabrik
 
Cloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guideCloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guidesparkfabrik
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developerssparkfabrik
 

Mais de sparkfabrik (20)

KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on KubernetesKCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
KCD Italy 2023 - Secure Software Supply chain for OCI Artifact on Kubernetes
 
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
 
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirtIAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
IAD 2023 - 22 Years of Agile and all I got is this lousy t-shirt
 
2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages2023 - Drupalcon - How Drupal builds your pages
2023 - Drupalcon - How Drupal builds your pages
 
2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte2023 - TAC23 - Agile HR - Racconti dal fronte
2023 - TAC23 - Agile HR - Racconti dal fronte
 
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
CodeMotion 2023 - Deep dive nella supply chain della nostra infrastruttura cl...
 
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP EcosystemWhat is the Secure Supply Chain and the Current State of the PHP Ecosystem
What is the Secure Supply Chain and the Current State of the PHP Ecosystem
 
UX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdfUX e Web sostenibile (UXday 2023).pdf
UX e Web sostenibile (UXday 2023).pdf
 
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
Drupal Dev Days Vienna 2023 - What is the secure software supply chain and th...
 
Deep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloudDeep dive nella supply chain della nostra infrastruttura cloud
Deep dive nella supply chain della nostra infrastruttura cloud
 
KCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with CrossplaneKCD Italy 2022 - Application driven infrastructure with Crossplane
KCD Italy 2022 - Application driven infrastructure with Crossplane
 
Come Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagineCome Drupal costruisce le tue pagine
Come Drupal costruisce le tue pagine
 
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native modernoDrupal 10: un framework PHP di sviluppo Cloud Native moderno
Drupal 10: un framework PHP di sviluppo Cloud Native moderno
 
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
Do you know what your Drupal is doing Observe it! (DrupalCon Prague 2022)
 
Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!Do you know what your Drupal is doing_ Observe it!
Do you know what your Drupal is doing_ Observe it!
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
 
From React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I startedFrom React to React Native - Things I wish I knew when I started
From React to React Native - Things I wish I knew when I started
 
Headless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIsHeadless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIs
 
Cloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guideCloud-Native Drupal: a survival guide
Cloud-Native Drupal: a survival guide
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developers
 

Drupal 8 - dal download del core alla pubblicazione in produzione

  • 1.
  • 2. Drupal 8: dal download del core alla pubblicazione in produzione Cos’è cambiato rispetto a Drupal 7
  • 3. Chi sono Vincenzo Di Biaggio @vincenzodb Software Developer @SparkFabrik - Milano Drupal Social Club https://www.facebook.com/sparkfabrik/ Software: https://github.com/vincenzodibiaggio Videogiochi: http://steamcommunity.com/id/vincenzodb/ Foto: https://500px.com/vincenzodb Musica: http://www.last.fm/it/user/vincenzodb
  • 4. 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
  • 5. Configurazione? “A configuration is neither cache or content, but everything that is left” @alexpott
  • 6. 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
  • 7. 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
  • 8. La “rivoluzione” Drupal 8 Il Configuration Management System ● Esportazione / Importazione configurazione ● Esportazione / Importazione singoli componenti ● Gestione degli override della configurazione
  • 9. CMS - File di configurazione uuid: 2f915dc3-f384-4e14-a700-d06c3f8e47d7 langcode: en status: true dependencies: { } id: authenticated label: 'Authenticated user' weight: 1 is_admin: false permissions: - '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
  • 10. Con gli esempi si fa prima Modulo: Drupal Day 2015 Content type: Drupal Day Article ● Title ● Body ● Image ● Category - Taxonomy Vocabulary Drupal Day Taxonomy
  • 11. Con gli esempi si fa prima / 2 Modulo: Drupal Day 2015 ● View ○ Last Entries ○ Content Type: Drupal Day Article ● Menu Item ○ Last Entries
  • 12. Premesse ● Replicazione delle funzionalità su vari ambienti ● Facilità di pubblicazione
  • 13. 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à
  • 14. 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
  • 15.
  • 16. 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
  • 17. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal DEFAULT SU DATABASE
  • 18. Gestione della configurazione Drupal 8 sites/default/services.yml services: config.storage: class: DrupalCoreConfigCachedStorage arguments: ['@config.storage.active', '@cache.config'] config.storage.active: class: DrupalCoreConfigFileStorage factory: DrupalCoreConfigFileStorageFactory::getActive
  • 19. 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( 'DrupalCoreConfigBootstrapConfigStorageFactory', 'getFileStorage' );
  • 20. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Variabili # Drupal 7 variable_set('var', 'Value'); variable_get('var', 'Default value'); variable_del('var');
  • 21. 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.';
  • 22. 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);
  • 23. 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);
  • 24. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 4 # Overrides permanenti public function loadOverrides($names) { $overrides = array(); if (in_array('system.site', $names)) { $overrides['system.site'] = ['name' => 'Overridden site name!']; } return $overrides; }
  • 25. Gestione della configurazione Drupal 8 Gestisce la configurazione di una installazione Drupal Overrides / 5 # Documentazione https://www.drupal.org/node/1928898
  • 26. 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
  • 27. Gestione della configurazione Drupal 8 Esportazione / Importazione della configurazione / # Interfaccia /admin/config/development/configuration/full/export /admin/config/development/configuration/full/import
  • 28. Gestione della configurazione Drupal 8 Sincronizzazione della configurazione # Interfaccia /admin/config/development/configuration Differenze tra la configurazione active e quella presente nella directory sync
  • 29. 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
  • 30. 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”
  • 31. Con gli esempi si fa prima / 4 Content Type Drupal Day Article node.type.drupal_day_article.yml uuid: 3005e153-6382-4173-920c-1232ba898c9d langcode: en status: true dependencies: .... name: 'Drupal Day Article' type: drupal_day_article description: '' help: '' new_revision: false preview_mode: 1 display_submitted: true
  • 32. Con gli esempi si fa prima / 5 Tassonomia Drupal Day Taxonomy taxonomy.vocabulary.drupal_day_2015_taxonomy.yml uuid: 09f00b65-1880-47d1-b001-1e42cadf8c43 langcode: en status: true dependencies: { } name: 'Drupal Day 2015 Taxonomy' vid: drupal_day_2015_taxonomy description: 'Drupal Day 2015 Taxonomy' hierarchy: 0 weight: 0
  • 33. Con gli esempi si fa prima / 6 Vista “Last Entries” views.view.last_entries_drupal_day_2015. yml uuid: eefbb1b8-9b34-4590-a000-de4247c4c335 langcode: en status: true dependencies: config: - core.entity_view_mode.node.teaser - node.type.drupal_day_article - system.menu.main module: - node - user id: last_entries_drupal_day_2015 label: 'Last Entries Drupal Day 2015' module: views base_table: node_field_data base_field: nid display: default: display_plugin: default id: default display_title: Master access: type: perm options: perm: 'access content' [....] items_per_page: 10
  • 34. 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
  • 35. 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
  • 36. Con gli esempi si fa prima / 8 Features - Creazione Bundle /admin/config/development/configuration/features/bundle
  • 37. 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
  • 38. Con gli esempi si fa prima / 9 Features - Creazione Feature 2 /admin/modules
  • 39. 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
  • 40. 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.yml langcode: en status: true dependencies: module: - menu_ui third_party_settings: menu_ui: available_menus: - main parent: 'main:' name: 'Drupal Day Article' type: drupal_day_article description: '' help: '' new_revision: false preview_mode: 1 display_submitted: true
  • 41. … replichiamo per N volte ...
  • 42. 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
  • 44. Organizzazione dell’ambiente con Docker Docker-compose https://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/sparkfabrik https://hub.docker.com/
  • 45. Organizzazione dell’ambiente con Docker Docker-compose / 2 cat docker-compose.yml data: extends: file: docker-common-services.yml service: data mysql: extends: file: docker-common-services.yml service: 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
  • 46. Sistema di build Phing https://www.phing.info/ PHing Is Not GNU make; it's a PHP project build system or build tool
  • 47. 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>
  • 48. Sistema di pubblicazione Capistrano http://capistranorb.com/ A remote server automation and deployment tool written in Ruby.
  • 49. 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
  • 50. 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
  • 51. 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!
  • 52. Grazie Vincenzo Di Biaggio @vincenzodb Software Developer @SparkFabrik - Milano Drupal Social Club https://www.facebook.com/sparkfabrik/