Manuelles Deployment ist ein Antipattern. Was plakativ klingt ist ein fester Grundsatz in jeder CI/CD Strategie. Wir sehen uns zusammen ein paar Gedanken zum Thema Automatisierte Auslieferung an und finden heraus, warum manuelles Deployment an sich schon einen Fehler darstellt.
Manuelles Deployment
Software wird immer komplexer. Mit der Entwicklung weg von Monolithen und hin zu Verteilten Systemen (Distributed Systems) wie Microservices haben Architekturen immer mehr bewegliche Teile, die dadurch zwar flexibel, aber auf gleichzeitig eine Fehlerquelle sind. Ein gutes Beispiel dafür ist OpenStack. Mit großer Macht kommt hier große Verantwortung: Das Deployment ist kompliziert und manuell. Auf Dauer ist so ein manuelles Deployment untragbar. Und hier sind vier essentielle Gründe dafür.
Aufwändige Deployment Dokumentation
Du musst eine aufwändige Deployment Schritt-für-Schritt Anleitung für das Deployment erstellen und pflegen. Die Dokumentation muss dabei alle Schritte genau beschreiben, Common Pitfalls definieren und liegt dann in der Regel auch noch für verschiedene Plattformen vor.
Reproduzierbarkeit und Nachvollziehbarkeit von Deployments
Genau wie jeder einzelne Build einer Software sollte auch deren Deployment immer reproduzierbar, nachvollziehbar und testbar sein. Das ist bei manuellen Deployments einfach nicht der Fall. Das gestaltet das Debugging schwierig.
Im besten Fall ist ein Build:
- Zwecks Fehlersuche automatisiert wiederholbar (Bedienerfehler würde hier das Debugging sowieso nutzlos machen)
- Nachvollziehbar (Jeder Schritt wird dokumentiert, es werden Logfiles geschrieben und ein eindeutiger Code wird befolgt)
- Testbar (Manuelles Testen eines Prozesses ist zeitaufwendig und verschwendet Ressourcen, wenn man ihn auch automatisch "umsonst" hätte testen können)
Konformität des Prozesses
Entwickler haben ihre ganz eigenen Praktiken. Es fängt beim Streit um den richtigen Editor an (nano > vim) und endet bei der Art und Weise, ein Terminal zu schließen. Gerne werden Deployment Prozesse auch mal on the fly "optimiert", was in der Regel zu Nicht.Konformität führt und die Deployments unberechenbar machen kann.
Repetitive Arbeit
Ein aufwändiges Deployment ist nicht nur langwierig, sondern auch langweilig! Hochbezahlte Entwickler immer wieder die gleiche langweilige repetitive, aber anspruchsvolle, Arbeit machen zu lassen, die auch offensichtlich automatisiert werden könnte, führt zu Frustration und ist grobe Geldverschwendung: Die Zeit wäre in aktiver Entwicklung besser investiert.
Fazit
Auf Dauer sollten alle Deployments auf einen automatisierten Prozess hinarbeiten. Jede manuelle Lösung ist auf Dauer untragbar und führt bei Entwicklern sowie Anwendern zu Unzufriedenheit und Abneigung. Ein Mensch sollte nur für zwei Schritte zu Rate gezogen werden: Das Auswahl des Environments und die Auswahl der Softwareversion. Alles darüber hinaus ist fehleranfällig und kann in der Regel abstrahiert werden.
Noch ein paar finale Denkanstöße, warum eine Automatisierung auch für dich Sinn machen könnte:
- Du bist nicht darauf angewiesen, dass dein Deployment Mitarbeiter gerade keinen Urlaub hat oder dass dein Team die Firma nicht verlässt
- Du kannst bei einem manuellen Deployment nur durch manuelles Durchführen und Testen eine Konformität nachweisen
- Deine Deployments sind unabhängig von Tageszeit, Personal und Anwender
Machst du deine Deployments noch manuell? Wenn ja, warum? Lass es mich in den Kommentaren wissen.
Kommentieren