Automatisierte Verwaltung sldeploy - Deployment Skript

alex's picture

Was ist sldeploy?

sldeploy ist ein in PHP geschriebenes Skript, welches für das Deployment von PHP Projekten eingesetzt werden kann.

Wieso sldeploy?

Ich habe mich dazu entschlossen dieses Skript öffentlich, inklusive Quellcode anzubieten, da ich mir davon verspreche dadurch dem Skript mehr Stabilität und Sicherheit zugeben.

Wie läuft sowas normalerweise in einem Projekt?
Es werden sich Gedanken gemacht, wie und mit was man das Deployment umsetzt. Anit, Phing, Capistrano u.s.w. kommen ins Gespräch. Bevor man sich dann an die "eigentliche" Lösung macht, fängt man letztendlich mit einem Bash-Script an (böse Gerüchte sind sogar verbreitet, dass manche Projekte noch händisch deployt werden). Und irgendwie bleibt man dann auch beim Bash Script, weil keine Zeit, kein weiteres Budget existieren oder was auch immer fehlt.
Das Bash Skript wächst und wird irgendwann auch sehr unübersichtlich. Tests für dieses Skript gibt es natürlich meist auch nicht.
Und hier setzt sldeploy ein. Um sich den Durchlauf der Bash-Entwicklung zu ersparen, wird hier PHP für das Deploy eingesetzt. Da es für PHP Projekte gedacht ist, sollte ja auch PHP auf den entsprechenden Rechnern vorhanden sein. sldeploy ist bewusst einfach gehalten, um den Einstieg leicht zu machen. Da das Projekt in PHP entwickelt wurde, können die Entwickler auch ohne große Einarbeitung ein Plugin für sldeploy schreiben.

Und das beste daran ist, man muss nicht von ganz vorne anfangen, wie es beim Deployment oft der Fall ist (was meine Erfahrung mir gezeigt hat).

Funktionsumfang

  • Unterstützung von CVS, SVN und GIT Repositories
  • Verwaltung der Systemkonfiguration über SCM
  • Zurücksetzen der Datenbank
  • Einrichtung einer neuen Systemumgebung (automatisiert)
  • Protokollierung
  • Benachrichtigung per Email (z.B. bei Fehlverhalten während des Deploys)
  • Einfache Erweiterung durch eigene Plugins

Vorteile durch den Einsatz

  • Formaler Prozess des Deployment wird klar definiert
  • Automatisiertes Deployment
  • Getestetes Skript - sldeploy wird bereits eingesetzt und hat sich schon in der Praxis bewährt. Wohingegen ein neues Skript, was speziell für ein Projekt angefertigt wird, erst eine gewisse Stabilität erlangen muss.

Vorhandene Plugins

Sämtliche Funktionalität wird über Plugins verfügbar gemacht. Plugins können beliebig ergänzt und kombiniert werden.
Hier die Liste der Plugins, die mit sldeploy geliefert wird:

  • update-project
  • update-system
    Die Konfigurationsdateien werden über ein SCM (wie GIT oder SVN) gepflegt. Mit update-system wird diese Konfiguration auf dem System aktiviert. Es können dazu auch bestimmte Dienste gelistet werden, die nach dem Deploy einen Restart benötigen, welche dann automatisch durchgeführt werden.
  • update-drupal
    Es wird mit Hilfe von Drupal ein Datenbank-Update und Aufräumarbeiten (wie Cache leeren) durchgeführt.
  • init-system
    Wenn eine neue Linux Umgebung eingerichtet wird, kann man mit diesem Plugin automatisch Verzeichnisse anlegen und eine Liste von Paketen (deb, rpm) installieren. Besonders wenn Virtualisierung eingesetzt wird, ist dies eine sehr hilfreiche Funktion.
  • reset-db
    Ersetzen einer lokalen Datenbank durch einen SQL Dump, der auch von einem externen Rechner automatisch generiert werden kann (mit Hilfe einer SSH Verbindung).

Unsere Buchempfehlung

Image of Versionskontrolle mit Git
Autor: Jon Loeliger
Verlag: O'Reilly
Verkaufsrang: 7904
Das folgende Buch befasst sich ausführlicher mit dem hier genannten Thema. Wenn Du mehr über Versionskontrolle mit Git erfahren willst, empfehlen wir Dir diesen Artikel.

Voraussetzungen

  • PHP CLI muss auf allen Rechner vorhanden sein, auf dem das Skript ausgeführt werden soll
  • Ein SCM (GIT, SVN oder CVS)
  • Grund-Erfahrung mit der Konsole

Installation

Der Source-Code kann von GitHub bezogen werden:

git clone git://github.com/alexandermeindl/sldeploy.git

Nun noch die Konfigurationsdatei einrichten. Es gibt mehrere Möglichkeiten, wo diese Datei abgelegt wird:

  1. im selben Verzeichnis wie das sldeploy Skript, die Konfigurationsdatei muss dann config.inc.php heißen.
  2. im Verzeichnis /etc mit dem Namen sldeploy.inc.php - also /etc/sldeploy.inc.php
  3. im Home-Verzeichnis des Benutzers, der sldeploy ausführt mit dem Namen .sldeploy.inc.php - also ~/.sldeploy.inc.php
  4. Die Priorität der verwendeten Dateien entspricht dieser Auflisten.
    Als Ausgangskonfigurationsdatei kann eine Kopie der Datei config.inc.php.dist verwenden, indem man diese kopiert:

    cp config.inc.php.dist config.inc.php

    Nun kann man sich an die Arbeit machen und die Konfiguration festlegen. Globale Einstellungen kann man in der Datei lib/config_default.inc.php einsehen, wobei man diese Datei nicht verändern sollte, sondern stattdessen die gewünschten Einstellungen in der config.inc.php überschreibt.

    Um das Skript auch außerhalb des Skriptverzeichnisses aufrufen zu können, empfielt es sich das Skriptverzeichnis im PATH mit aufzunehmen. Das kann durch folgende Anweisung erledigt werden:

    echo 'export PATH="/pfad/zum/sldeploy/verzeichnis:$PATH"' >>~/.bashrc
    source ~./bashrc

    Eigenes Plugin schreiben

    <?php

    /**
     * @file
     *
     * Beispiel eines neuen Plugins
     *
     */


    $plugin['info']       = 'Meine Plugin-Beschreibung';
    $plugin['root_only']  = TRUE; // für dieses Plugin sind root-Rechte erforderlich

    class sldeploy_plugin_sample extends sldeploy {

      /*
       * Die Methode run wird automatisch ausgefuehrt, wenn das Plugin verwendet wird
       */

      public function run() {

       // Hier beliebigen PHP Code schreiben

       // Einen Test ausgeben
       $this->msg('Das gibt mein Beispiel Plugin aus.');

       // Einen Systembefehl ausführen
       $this->system('tar -cfz /root/tmp.tar.gz /tmp');
      }
    }

    Die Klasse dieses Plugins heisst sldeploy_plugin_sample. sl_deploy_plugin_ muss immer als Präfix verwendet werden und dies erweitert mit dem Namen des Plugins. Hier im Beispiel wird "sample" verwendet, was wiederum bedeutet, dass die Datei unter plugins/plugin_sample.class.php abgespeichert werden muss.
    Ruft man nun sldeploy -h auf, wird das neue "sample" Plugin auch in der Hilfe aufgelistet:
    sldeploy 0.20

    Usage: -p PLUGIN [OPTION]

    MODE is required and has to be one of the following values:
    init-system     initial a new system environment
    permission      set file and directory permissions
    reset-db        reset database
    reset-dir       reset directory
    system-log      log system changes
    update-all      Run update-project, update-system, update-drupal and permission plugins
    update-drupal   run drupal updates on all drupal projects
    update-project  update all project repositories
    update-system   update system files/configuration

    List of optional parameters:
    -h      display this help
    -q      suppress messages (expect error message)
    -r      send status report (e.g. email)

    Die Ausführung des neuen Plugins erfolgt nun mit folgendem Befehl:

    sldeploy -p sample

    Fallbeispiele für den Einsatz

    Deploy der Produktivumgebung

    Produktv/Staging Datenbank auf Entwicklersystem übertragen

    Pflege der Systemkonfiguration

    Einfaches Aktualisieren mehrerer Repositories mit einem Befehl

    Systemkonfigurationen protokollieren

Alle hier aufgeführten Informationen / Dokumentationen sind nur als Denkanstoß gedacht und wurden mit großer Sorgfalt erarbeitet. Es besteht jedoch kein Anrecht auf Vollständigkeit / Richtigkeit. Der Autor kann für eventuell verbliebene fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung übernehmen. Gleiches gilt für entstandene Schäden bei unsachgemäßer Ausführung! Im Zweifelsfall immer einen Fachmann mit der Durchführung beauftragen!

Gerne bieten wir Ihnen hierfür unsere Consulting Dienste an. © Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten.