SlideShare a Scribd company logo
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 minificazione 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 filesystem
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" 
}
composer global require consolidation/robo
INSTALLAZIONE
PHAR
o scaricandolo via HTTPS da
Oppure installandolo in /usr/bin
wget http://robo.li/robo.phar
GitHub releases
sudo chmod +x robo.phar && mv robo.phar /usr/bin/robo
PER INIZIARE...
Creiamo il nostro Robo le.php con
Ed ecco il file:
cd mio_progetto 
robo init
/** 
 * This is project's console commands 
 * configuration for Robo task runner. 
 * 
 * @see http://robo.li/ 
 */ 
class RoboFile extends RoboTasks 
{ 
    // define public methods as commands 
}
COMANDI
Eseguendo:
class RoboFile extends RoboTasks { 
 
    function hello($world) { 
        $this­>say("Hello, $world"); 
    } 
}
robo hello Paolo 
➜ Hello, Paolo
ARGOMENTI
Eseguendo:
class RoboFile extends RoboTasks { 
 
    function helloOne($world = "Francesco") { 
        $this­>say("Hello, $world"); 
    } 
 
    function helloMulti(array $world) { 
        $this­>say("Hello, " . implode(', ', $world)); 
    } 
}
robo hello:one 
➜ Hello, Francesco 
 
robo hello:multi Paolo Francesco 
➜ Hello, Paolo Francesco
OPZIONI
Eseguendo:
function hello($opts = ['silent' => false]) { 
    if (!$opts['silent']) $this­>say("Hello, world"); 
}
robo hello 
➜ Hello, world 
 
robo hello ­­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
composer require boedah/robo­drush
class RoboFile extends RoboTasks { 
 
    use BoedahRoboTaskDrushloadTasks; 
 
    public function test() { 
        // ... 
    } 
}
CREARE UN TASK
TRAIT LOADTASKS.PHP
namespace MyAssetTasks; 
 
trait loadTasks { 
 
    /** 
     * Example task to compile assets 
     * 
     * @param string $pathToCompileAssets 
     * @return MyAssetTasksCompileAssets 
     */ 
    protected function taskCompileAssets($path = null) { 
        // Always construct your tasks with the `task()` task builder.
        return $this­>task(CompileAssets::class, $path); 
    } 
}
CREARE UN TASK
TASK IMPLEMENTATION
class CompileAssets implements RoboContractTaskInterface { 
 
    // configuration params 
    protected $path; 
    protected $to; 
    function __construct($path){ 
        $this­>path = $path; 
    } 
 
    function to($filename){ 
        $this­>to = $filename; 
        // must return $this 
        return $this; 
    } 
 
    // must implement Run 
IO: ROBOOUTPUT
Stampare messaggi
Oppure interagire:
$this­>say("Hello");
$name = $this­>ask("What is your name?");
TASK VS STACK
Le classi Stack contengono un insieme di task da eseguire
uno dopo l'altro. Inoltre può essere configurato per
bloccarsi al primo errore che incontra senza proseguire
con gli altri task.
$this­>stopOnFail(true);
STACK VS COLLECTION
Robo offre 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
(Robofile) 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 ➜ Configurations
Work in progress..
github.com/lucacracco/robo-drupal8
YAML CONFIGURATIONS
# Enviroment 
environment: local 
 
# Base Path 
base_path: /var/www/html 
 
# Path to drush 
drush_path: ./vendor/bin/drush 
 
# Domani used 
domain: 'http://test.dd' 
 
# Database Configuration 
database: 
  url: 'mysql://drupal:drupal@mysql_test:3306/drupal' 
  prefix: '' 
TASKS CUSTOM
public function deploy($opts = self::OPTS) {
 
    $this­>say("Deploy"); 
 
    // Init parameters. 
    $this­>init($opts['environment'], $opts['site']); 
 
    // Execute functions. 
    $this­>backupDatabase(); 
    $this­>importConfig(); 
    $this­>rebuildCache(); 
    $this­>entityUpdates(); 
    $this­>coreCron(); 
}
ROBO COMMANDS
➜  vendor/bin/robo list 
Robo version 1.0.5 
 
Available commands: 
  deploy                   Deploy. 
  help                     Displays help for a command 
  list                     Lists commands 
 build 
  build:conf               Build a site from configuration files. 
  build:from­database      Build an existing site by importing the database.
  build:new                Build a site from scratch. 
 configuration 
  configuration:export     Export configuration after clear cache. 
  configuration:import     Import configuration. 
 features 
  features:import          Import features. 
DRUPALDAY
ROMA 2017
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8

More Related Content

What's hot

La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
Gianluca Padovani
 
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
Giorgio Cefaro
 
Come si creano le app Android
Come si creano le app AndroidCome si creano le app Android
Come si creano le app Android
Andrea Lazzarotto
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
Franco Lombardo
 
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
giacomos
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
Valerio Radice
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
bobpuley
 
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
CRS4 Research Center in Sardinia
 

What's hot (8)

La mia prima lezione di pozioni
La mia prima lezione di pozioniLa mia prima lezione di pozioni
La mia prima lezione di pozioni
 
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
 
Come si creano le app Android
Come si creano le app AndroidCome si creano le app Android
Come si creano le app Android
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
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
 
Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]Introduzione a Docker (Maggio 2017) [ITA]
Introduzione a Docker (Maggio 2017) [ITA]
 
Panoramica su Ant
Panoramica su AntPanoramica su Ant
Panoramica su Ant
 
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
Scripting e DataWarehouse sui Big Data. Luca Pireddu (CRS4)
 

Viewers also liked

[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8
[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8
[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8
Wellnet srl
 
Tooling per il tema in Drupal 8
Tooling per il tema in Drupal 8Tooling per il tema in Drupal 8
Tooling per il tema in Drupal 8
Wellnet srl
 
[Luca Lusso] - Devel - D8 release party
[Luca Lusso] - Devel - D8 release party[Luca Lusso] - Devel - D8 release party
[Luca Lusso] - Devel - D8 release party
Wellnet srl
 
[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming
[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming
[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming
Wellnet srl
 
[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.
[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.
[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.
DrupalDay
 
Agriculture Robot
Agriculture RobotAgriculture Robot
Agriculture Robot
Radhe Chauhan
 
Agricultural robot
Agricultural robotAgricultural robot
Agricultural robot
Aleena Khan
 

Viewers also liked (7)

[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8
[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8
[Marco Capobussi] - DevOps: strumenti di automazione per Drupal8
 
Tooling per il tema in Drupal 8
Tooling per il tema in Drupal 8Tooling per il tema in Drupal 8
Tooling per il tema in Drupal 8
 
[Luca Lusso] - Devel - D8 release party
[Luca Lusso] - Devel - D8 release party[Luca Lusso] - Devel - D8 release party
[Luca Lusso] - Devel - D8 release party
 
[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming
[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming
[Gian Mario Mereu] - Drupal & Patternlab: un nuovo approccio al theming
 
[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.
[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.
[drupalday 2017] - Accessibilità Web: Finalità, metodologie e strumenti.
 
Agriculture Robot
Agriculture RobotAgriculture Robot
Agriculture Robot
 
Agricultural robot
Agricultural robotAgricultural robot
Agricultural robot
 

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

Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
Marco Buttolo
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
Lucio Grenzi
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
Andrea Lazzarotto
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
Riccardo Franconi
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017
Fabrizio Bernabei
 
Al telefono con Adhearsion e Ruby
Al telefono con Adhearsion e RubyAl telefono con Adhearsion e Ruby
Al telefono con Adhearsion e Ruby
Luca Pradovera
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
Marcello Teodori
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
Mirco Leo
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
Alessandro Loffredo
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
Edmondo Porcu
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
Emanuele Bartolesi
 
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Codemotion
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
DotNetMarche
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
Luciano Colosio
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
Michele Capra
 
Testing in javascript
Testing in javascriptTesting in javascript
Testing in javascriptPiero Bozzolo
 
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore RomeoHTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
marcocasario
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
 

Similar to [Luca Cracco] - DevOps: strumenti di automazione per Drupal8 (20)

Introduzione ros
Introduzione rosIntroduzione ros
Introduzione ros
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017Introduzione a React Native - Mokapp 2017
Introduzione a React Native - Mokapp 2017
 
Al telefono con Adhearsion e Ruby
Al telefono con Adhearsion e RubyAl telefono con Adhearsion e Ruby
Al telefono con Adhearsion e Ruby
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Sviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con JavaSviluppare su OpenOffice.org con Java
Sviluppare su OpenOffice.org con Java
 
Installazione del cms alfresco
Installazione del cms alfrescoInstallazione del cms alfresco
Installazione del cms alfresco
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
 
Scala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perchéScala: come recuperare la programmazione funzionale e perché
Scala: come recuperare la programmazione funzionale e perché
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
 
FANTIN BIG DATA (2)
FANTIN BIG DATA (2)FANTIN BIG DATA (2)
FANTIN BIG DATA (2)
 
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
Andrea Ceroni - Alexa, please deploy my Azure architecture - Codemotion Rome ...
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Testing in javascript
Testing in javascriptTesting in javascript
Testing in javascript
 
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore RomeoHTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
HTML5 Italy: Mai più CSS, fogli di stile moderni con LESS - Salvatore Romeo
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 

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