際際滷

際際滷Share a Scribd company logo
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
ROBO
MODERN TASK RUNNER FOR PHP
LUCA CRACCO
Freelance & Drupal Developer
@luca_cracco
github.com/lucacracco
CHE COS' ROBO
Robo 竪 un
E' scritto in PHP con una programmazione orientata
agli oggetti
Ha a disposizione moltissimi task/comandi per lo
sviluppo, test, distribuzione, ecc..
task runner
TASK RUNNERS
Sono tools che permetto di automatizzare le operazioni
pi湛 riccorenti; sia semplici operazioni di mini鍖cazione del
css sia compilazione e pubblicazione di codice
Tra i pi湛 conosciuti troviamo , , .. ma
anche , , ...
Buildbot Jenkins
Grunt Gulp
TASK RUNNER PHP
Task PHP
BLDR
Rocketter
USARE ROBO PER
Eseguire comandi
Lanciare test
Automatizzare le opereazioni pi湛 comuni
Eseguire attivit parallele
Percepire cambiamenti sul 鍖lesystem
Inizializzare ambienti e progetti
..PERCH ROBO?
E' scritto in PHP ad oggetti
Supporto per i comandi: robo list
Comandi con convalida, colori ANSI, ecc..
Si pu嘆 installare con Composer per il progetto
Vi sono un sacco di task gi pronti
INSTALLAZIONE
COMPOSER
Aggiungendolo al composer.json del progetto
o installandolo globalmente
require足dev:{
"consolidation/robo":"^1.0.0"
}
composerglobalrequireconsolidation/robo
INSTALLAZIONE
PHAR
o scaricandolo via HTTPS da
Oppure installandolo in /usr/bin
wgethttp://robo.li/robo.phar
GitHub releases
sudochmod+xrobo.phar&&mvrobo.phar/usr/bin/robo
PER INIZIARE...
Creiamo il nostro Robo le.php con
Ed ecco il 鍖le:
cdmio_progetto
roboinit
/**
*Thisisproject'sconsolecommands
*configurationforRobotaskrunner.
*
*@seehttp://robo.li/
*/
classRoboFileextendsRoboTasks
{
//definepublicmethodsascommands
}
COMANDI
Eseguendo:
classRoboFileextendsRoboTasks{

functionhello($world){
$this足>say("Hello,$world")余
}
}
robohelloPaolo
Hello,Paolo
ARGOMENTI
Eseguendo:
classRoboFileextendsRoboTasks{

functionhelloOne($world="Francesco"){
$this足>say("Hello,$world")余
}

functionhelloMulti(array$world){
$this足>say("Hello,".implode(',',$world))余
}
}
robohello:one
Hello,Francesco

robohello:multiPaoloFrancesco
Hello,PaoloFrancesco
OPZIONI
Eseguendo:
functionhello($opts=['silent'=>false]){
if(!$opts['silent'])$this足>say("Hello,world")余
}
robohello
Hello,world

robohello足足silent
ROBO TASKS
Base Tasks, FileSystem Tasks, File Tasks, Composer Tasks,
VCS Tasks, Development Tasks, Assets Tasks, Archive
Tasks, SSH, Rsync Tasks, Testing Tasks, NPM Tasks, Bower
Tasks, Gulp Tasks, Docker Tasks, ApiGen Tasks, e molti
altri in Packagist.org
INCLUDERE UN TASK
Aggiungerlo al progetto
Richiamarlo nel RoboFile
composerrequireboedah/robo足drush
classRoboFileextendsRoboTasks{

useBoedahRoboTaskDrushloadTasks余

publicfunctiontest(){
//...
}
}
CREARE UN TASK
TRAIT LOADTASKS.PHP
namespaceMyAssetTasks余

traitloadTasks{

/**
*Exampletasktocompileassets
*
*@paramstring$pathToCompileAssets
*@returnMyAssetTasksCompileAssets
*/
protectedfunctiontaskCompileAssets($path=null){
//Alwaysconstructyourtaskswiththe`task()`taskbuilder.
return$this足>task(CompileAssets::class,$path)余
}
}
CREARE UN TASK
TASK IMPLEMENTATION
classCompileAssetsimplementsRoboContractTaskInterface{

//configurationparams
protected$path余
protected$to余
function__construct($path){
$this足>path=$path余
}

functionto($filename){
$this足>to=$filename余
//mustreturn$this
return$this余
}

//mustimplementRun
IO: ROBOOUTPUT
Stampare messaggi
Oppure interagire:
$this足>say("Hello")余
$name=$this足>ask("Whatisyourname?")余
TASK VS STACK
Le classi Stack contengono un insieme di task da eseguire
uno dopo l'altro. Inoltre pu嘆 essere con鍖gurato per
bloccarsi al primo errore che incontra senza proseguire
con gli altri task.
$this足>stopOnFail(true)余
STACK VS COLLECTION
Robo o鍖re delle collection di task che permettono il
rilevamento degli errori e il recupero/rollback. Se uno dei
task della collection va in errore, l'operazione viene
interrotta; attivit di rollback pu嘆 essere quindi eseguita
per ripristinare il sistema allo stato originale.
ROBOFILES MULTIPLI
E' possibile fornire il maggior numero di classi di comandi
(Robo鍖le) direttamente al costruttore RoboRunner
$commandClasses=[
MyProjectCommandsBuildCommands::class,
MyProjectCommandsDeployCommands::class
]余
$statusCode=RoboRobo::run(
$_SERVER['argv'],
$commandClasses,
'MyAppName',
'0.0.0足alpha0'
)余
exit($statusCode)余
DRUPAL8 & COMPOSER
Usare Composer con Drupal
Composer template per progetti Drupal
ROBO & DRUPAL
Integrazione Robo con Drush:
boedah/robo-drush
$this足>taskDrushStack()
足>drupalRootDirectory('/var/www/html/some足site')
足>uri('sub.example.com')
足>maintenanceOn()
足>updateDb()
足>revertAllFeatures()
足>maintenanceOff()
足>run()余
ROBO DRUPAL8 BUILDER
Robo
Drush
Tasks Robo/Drush
Yaml Files  Con鍖gurations
Work in progress..
github.com/lucacracco/robo-drupal8
YAML CONFIGURATIONS
#Enviroment
environment:local

#BasePath
base_path:/var/www/html

#Pathtodrush
drush_path:./vendor/bin/drush

#Domaniused
domain:'http://test.dd'

#DatabaseConfiguration
database:
url:'mysql://drupal:drupal@mysql_test:3306/drupal'
prefix:''
TASKS CUSTOM
publicfunctiondeploy($opts=self::OPTS){

$this足>say("Deploy")余

//Initparameters.
$this足>init($opts['environment'],$opts['site'])余

//Executefunctions.
$this足>backupDatabase()余
$this足>importConfig()余
$this足>rebuildCache()余
$this足>entityUpdates()余
$this足>coreCron()余
}
ROBO COMMANDS
vendor/bin/robolist
Roboversion1.0.5

Availablecommands:
deployDeploy.
helpDisplayshelpforacommand
listListscommands
build
build:confBuildasitefromconfigurationfiles.
build:from足databaseBuildanexistingsitebyimportingthedatabase.
build:newBuildasitefromscratch.
configuration
configuration:exportExportconfigurationafterclearcache.
configuration:importImportconfiguration.
features
features:importImportfeatures.
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
DRUPALDAY
ROMA 2017
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8

More Related Content

[Luca Cracco] - DevOps: strumenti di automazione per Drupal8