Automatisierte Verwaltung sldeploy - Deployment Skript
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
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:
Nun noch die Konfigurationsdatei einrichten. Es gibt mehrere Möglichkeiten, wo diese Datei abgelegt wird:
- im selben Verzeichnis wie das sldeploy Skript, die Konfigurationsdatei muss dann config.inc.php heißen.
- im Verzeichnis /etc mit dem Namen sldeploy.inc.php - also /etc/sldeploy.inc.php
- im Home-Verzeichnis des Benutzers, der sldeploy ausführt mit dem Namen .sldeploy.inc.php - also ~/.sldeploy.inc.php
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:
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:
source ~./bashrc
Eigenes Plugin schreiben
/**
* @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:
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:
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.


