Manuelles Deployment als Antipattern in der Continuous Delivery

Image of Felix Klauke
Felix Klauke

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

Blog

Verwandte Artikel

Image of Felix Klauke
Felix Klauke

Warum ich Continuous Delivery liebe und wieso du das auch solltest

Indem du Software kontinuierlich auslieferst ebnest du den Weg für höhere Softwarequalität. Die...

Weiterlesen
Image of Felix Klauke
Felix Klauke

Die Anatomie einer großartigen Continuous Integration Pipeline

Bei Softwareentwicklung spricht jeder von Automatisierung und von Qualität. Ein CI/CD Konzept hilft...

Weiterlesen