Drupal Deployment 2.0
Christian Schramm
Webentwicklung, Projektmanagement, Deployment
Brightsolutions GmbH, Darmstadt


Twitter: schrammos
XING: https://www.xing.com/profile/Christian_Schramm12
Facebook: https://www.facebook.com/schrammos
Mail: schramm@brightsolutions.de
Agenda


Jenkins Continous Integration
Features, Strongarm
Update- und Drush-Scripts
Updatescript- und Drushscript-Prozessor
Git und eine Repository-Strategie
Codemetriken und Codeanalyse beim Deployment
Continous Integration mit Jenkins
Über Weboberfläche können Jobs getriggert werden


Jenkins Jobs
- Dev-Server aktualisieren (git pull, autom. alle 15 min.)
- Stage-Server aktualisieren (git pull, manuell getriggert)
- Live-Server aktualisieren (drush-rsync von Stage-Server)
- Dokumentation erstellen (Doxygen Plugin)
Jenkins
                                               Continous Integration
                                                      Server


                 Development
                    Server

Webdeveloper 1
                                      Stage
Local, XAMPP,                         Server
  Git, Drush




                                                            Live
Webdeveloper 2
                                                           Server
Local, XAMPP,              Git-Repo
  Git, Drush                Server
Features und Strongarm exportable (Auswahl)
Berechtigungen               Image-Styles
Block Settings               Profile Types
CK-Editor Profiles           Rollen
Conditional Fields           Rules
Content-Types                Taxonomie (keine Terms)
Context                      Textformate
Fields, Fieldgroups          Variables
Flag-Settings                Views
Feature Updateprozess
- Aktualisierte Features werden vom Entwickler in das
 Git-Repo gepushed
- Jenkins (CI) aktualisiert Dev-, Stage- oder Live-Server


Problem:
- Features müssen beim Deployment reverted werden
- Manches ist mit Features nicht exportierbar


Lösung: Updatescripts
Update- und Drush-Scripts
- enthalten PHP-Code der beim Deployment ausgeführt wird
- werden unter /sites/default/updatescripts abgelegt
- werden beim Deployment automatisch ausgeführt


Update- und Drush-Script Aufgaben
- Module an- und abschalten
- Themes aktivieren
- Features reverten
- Deployment von Strukturen die mit Features nicht gehen
- einzelne Variablen setzen
Update- und Drush-Scripts Beispiel

 Beispiel 1: Einschalten von Modulen mit einem Drush- / Updatescript

 <?php

  $host->set_author ('Christian Schramm');
  $host->set_description ('Enable initial modules.');

  // enable initial modules
  $host->drush ("en contact");
  $host->drush ("en ctools");
  $host->drush ("en views");
  $host->drush ("en views_ui");

  $host->finish_processing ();
Update- und Drush-Script-Prozessor (Modul)


- stellt in Drupal eine Verwaltungsoberfläche bereit
- kann Updatescripte ausführen (Button)
- registriert ausgeführte Updatescripte in der Datenbank
- erweitert Drush um einen Befehl (drush updatescripts)


Mit diesem Drush-Befehl werden alle neuen Updatescripts
von Jenkins beim Deployment automatisch ausgeführt.
Jenkins Deployment mit Updatescripts


Im Buildprozess von Jenkins passiert folgendes:

ssh servername "cd /var/www/projectname.de/www
               && git pull && git submodule init && git submodule update
               && drush updatescripts && drush cc all"
Git und eine Repository-Strategie


Alle Entwickler arbeiten auf dem DEV-Branch des Repos.


Das Filesystem des Dev- und Stage-Servers entspricht auch
dem Stand des DEV-Branches.


Der Master-Branch entspricht immer der Live-Version und wird
ausschließlich beim aktualisieren des Live-Servers von
Jenkins aktualisiert.
Codemetriken und Codeanalyse


Beim Build kann Jenkins mit vielen Plugins Codeanalysen
ausführen, z.B. Duplicate Content, Lines of Code, Lines of
Comments, Coding Style prüfen


Als Test können auch SimpleTests von (eigenen) Modulen via
Drush ausgeführt werden
Workflow für Entwickler


- alle Änderungen in Features verpacken
- aspektorientierte Features bauen
- bei aktualisierten Features ein Updatescript zum reverten
  des Features schreiben
- Änderungen die nicht durch Features abzudecken sind durch
  eigenes Updatescript umsetzen
- Features und Updatescripts committen und pushen
Workflow für Dev-, Stage-, Live-Serverupdates


- Dev-Server-Builds automatisch alle 15 min.
- Stage-Server-Builds manuell, via Knopfdruck
- Live-Server-Builds manuell, via Knopfdruck


Ausfallzeiten des Servers während der Updates sehr kurz
(wenige Minuten je nach Updatemenge).
Mit Jenkins, Drush und Updatescripts alles voll automatisiert,
keine Nacharbeit nötig.
Viel Spaß noch auf dem

 Drupal Camp 2012

Deployment 2.0

  • 1.
  • 2.
    Christian Schramm Webentwicklung, Projektmanagement,Deployment Brightsolutions GmbH, Darmstadt Twitter: schrammos XING: https://www.xing.com/profile/Christian_Schramm12 Facebook: https://www.facebook.com/schrammos Mail: schramm@brightsolutions.de
  • 3.
    Agenda Jenkins Continous Integration Features,Strongarm Update- und Drush-Scripts Updatescript- und Drushscript-Prozessor Git und eine Repository-Strategie Codemetriken und Codeanalyse beim Deployment
  • 4.
    Continous Integration mitJenkins Über Weboberfläche können Jobs getriggert werden Jenkins Jobs - Dev-Server aktualisieren (git pull, autom. alle 15 min.) - Stage-Server aktualisieren (git pull, manuell getriggert) - Live-Server aktualisieren (drush-rsync von Stage-Server) - Dokumentation erstellen (Doxygen Plugin)
  • 5.
    Jenkins Continous Integration Server Development Server Webdeveloper 1 Stage Local, XAMPP, Server Git, Drush Live Webdeveloper 2 Server Local, XAMPP, Git-Repo Git, Drush Server
  • 6.
    Features und Strongarmexportable (Auswahl) Berechtigungen Image-Styles Block Settings Profile Types CK-Editor Profiles Rollen Conditional Fields Rules Content-Types Taxonomie (keine Terms) Context Textformate Fields, Fieldgroups Variables Flag-Settings Views
  • 7.
    Feature Updateprozess - AktualisierteFeatures werden vom Entwickler in das Git-Repo gepushed - Jenkins (CI) aktualisiert Dev-, Stage- oder Live-Server Problem: - Features müssen beim Deployment reverted werden - Manches ist mit Features nicht exportierbar Lösung: Updatescripts
  • 8.
    Update- und Drush-Scripts -enthalten PHP-Code der beim Deployment ausgeführt wird - werden unter /sites/default/updatescripts abgelegt - werden beim Deployment automatisch ausgeführt Update- und Drush-Script Aufgaben - Module an- und abschalten - Themes aktivieren - Features reverten - Deployment von Strukturen die mit Features nicht gehen - einzelne Variablen setzen
  • 9.
    Update- und Drush-ScriptsBeispiel Beispiel 1: Einschalten von Modulen mit einem Drush- / Updatescript <?php $host->set_author ('Christian Schramm'); $host->set_description ('Enable initial modules.'); // enable initial modules $host->drush ("en contact"); $host->drush ("en ctools"); $host->drush ("en views"); $host->drush ("en views_ui"); $host->finish_processing ();
  • 10.
    Update- und Drush-Script-Prozessor(Modul) - stellt in Drupal eine Verwaltungsoberfläche bereit - kann Updatescripte ausführen (Button) - registriert ausgeführte Updatescripte in der Datenbank - erweitert Drush um einen Befehl (drush updatescripts) Mit diesem Drush-Befehl werden alle neuen Updatescripts von Jenkins beim Deployment automatisch ausgeführt.
  • 11.
    Jenkins Deployment mitUpdatescripts Im Buildprozess von Jenkins passiert folgendes: ssh servername "cd /var/www/projectname.de/www && git pull && git submodule init && git submodule update && drush updatescripts && drush cc all"
  • 12.
    Git und eineRepository-Strategie Alle Entwickler arbeiten auf dem DEV-Branch des Repos. Das Filesystem des Dev- und Stage-Servers entspricht auch dem Stand des DEV-Branches. Der Master-Branch entspricht immer der Live-Version und wird ausschließlich beim aktualisieren des Live-Servers von Jenkins aktualisiert.
  • 13.
    Codemetriken und Codeanalyse BeimBuild kann Jenkins mit vielen Plugins Codeanalysen ausführen, z.B. Duplicate Content, Lines of Code, Lines of Comments, Coding Style prüfen Als Test können auch SimpleTests von (eigenen) Modulen via Drush ausgeführt werden
  • 14.
    Workflow für Entwickler -alle Änderungen in Features verpacken - aspektorientierte Features bauen - bei aktualisierten Features ein Updatescript zum reverten des Features schreiben - Änderungen die nicht durch Features abzudecken sind durch eigenes Updatescript umsetzen - Features und Updatescripts committen und pushen
  • 15.
    Workflow für Dev-,Stage-, Live-Serverupdates - Dev-Server-Builds automatisch alle 15 min. - Stage-Server-Builds manuell, via Knopfdruck - Live-Server-Builds manuell, via Knopfdruck Ausfallzeiten des Servers während der Updates sehr kurz (wenige Minuten je nach Updatemenge). Mit Jenkins, Drush und Updatescripts alles voll automatisiert, keine Nacharbeit nötig.
  • 16.
    Viel Spaß nochauf dem Drupal Camp 2012