Bei der Ausarbeitung einer Deployment Strategie geht es darum ein zielgerichtetes Vorgehen von Anfang festzulegen. Man muss sich klar sein, was die Rahmenbedingungen für das Deployment sein werden und wie diese in den Deploymentvorgang zu implementieren sind.
Was ist das Ziel?
Kurz ausgedrückt: eine 1-Klick-Lösung
Was genau bringt das für Vorteile mit sich?
- einfache Anwendung
- keine Fachkenntnisse für die Ausführung erforderlich
- schnell durchführbar
- testbar, da alle Arbeitsschritte automatisch ausgeführt werden
- Einsatz von Continuous Integration möglich
Entwicklungsintervall (Beispiel)
- Entwicklung (mit eventuelles realtime Deployment zu einer Testumgebung
- Deployment auf Staging
- QA
- Deployment auf Staging (mit Bugfixes)
- QA
- Deployment auf Produktion
Verantwortlichkeit
Für das Deployment sollte eine feste Person aus dem Projektteam verantwortlich sein. Diese Person ist Ansprechpartner für die Entwickler, wenn es um den Umgang mit dem Deployment geht. Es werden Fragen wie “wo müssen Dateien liegen” oder “wie gehe ich mit Updates um” auftauchen, die vom Deployment Manager beantwortet werden. Eigenschaften eines Deployment Managers:
- sehr gute Projektkenntnisse
- gute System Kenntnisse (System-Administrator?)
- Programmier-Kenntnisse
- Bereitschaft zur Arbeit an ausgefallenen Arbeitszeiten, wie Wochenende oder Mitternacht (oder beides ;))
Dokumentation
Es ist sehr wichtig, dass der komplette Deployment-Prozess klar definiert wird. Dadurch wird sichergestellt, dass auch jemand anderes diese Arbeit übernehmen kann. Des weiteren haben dadurch die Entwickler eine Anlaufstelle, wenn Sie Details zu Deployment wissen wollen (die eventuell bei der Umsetzung des Projektes benötigt werden). In der Dokumentation wird das Konzept für das Deployment festgelegt:
- Der Workflow des Deploys
- Fallback Szenario
- Systemvoraussetzungen
- Dauer eines Deploy-Vorganges (=Ausfallzeit)
Strategien zur Ausführung
Es gibt mehrere Strategien, die die Regelung des Deploy-Prozesses festlegen:
- manuelles Auslösen des Deploy Prozesses
- halb-automatisches Auslösen des Deploy Prozesses
- automatisches Auslösen des Deploy Prozesses
- zeitlich gesteuerter Prozess
- Event gesteuerter Prozess
Minimierung der Ausfallzeit
Die Ausfallzeit durch das Deployment muss meist sehr kurz gehalten werden, da durch Ausfallzeit meist finanzieller oder viraler Schaden entsteht. Um die Ausfallzeit kurz zu halten, sollte folgendes eingehalten werden:
- vollautomatisches Script - 1-Klick-Methode (nur dadurch können alle Schritte (Workflow) als Vorbereitung getestet werden)
- Ausführung durch den Deployment Manager (falls ein Problem auftritt, weiss er als erstes was zu tun ist)
- Testlauf in einer Staging-Umgebung
- aktuelle vorliegende Dokumentationen (Deployment und Entwicklung; Stichwort "Betriebshandbuch")
Verwendung vorhandener Tools
- Version control systems (SVN, GIT)
- Capistrano, Ant, Make, bash, Phing, PEAR, PHP
- CruiseControl, Hudson
- phpUnderControl (requires CruiseControl)
Umgang mit der Datenbank
- dbdeploy
Strukturierung des Version Control System
- Projektdateien
- Projektkonfigurationsdateien
- System Konfigurationsdateien
- Skripte (Build, Deployment, Update, Wartung, Cronjobs, u.s.w.)
Lösung
Die Lösung ist ein Skript in der Sprache seiner Wahl (bash, PHP, …) kombiniert mit einem Version Control System (SVN, GIT, …). Idealerweise sollten so viel wie möglich Funktionalität aus dem individuellen Skript ausgelagert sind. Dazu können z.B. Lösungen wie dbdeploy, drush (für Drupal) oder PEAR Pakete zum Einsatz kommen.