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.
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.
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.
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:
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.
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.
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:
Machst du deine Deployments noch manuell? Wenn ja, warum? Lass es mich in den Kommentaren wissen.