Drupal Day 2015 - Drupal 8 dal download del core alla pubblicazione in produzione
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
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
8. La “rivoluzione” Drupal 8
Il Configuration Management System
Esportazione / Importazione configurazione
Esportazione / Importazione singoli componenti
Gestione degli override della configurazione
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
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
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)
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
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/no
de/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
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
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
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!