Softwaretechnik

Lesson 9
Contiuous Integration / Continuous Deployment

Meist zitierte Satz eines Entwicklers


"Works on my machine!"

Geek & Poke


Keine zwei Rechner sind gleich

  • Hardware
  • Betriebssystem (Version und Patch Level)
  • Installierte Tools (Welche, Version, Reihenfolge, Konfiguration)


=> Wenn zwei Entwickler das gleiche tun kommt noch lange nicht das gleiche bei raus

Integration

Die Kombination von Einzelteilen (Teilsystemen) zu einem Ganzen (Gesamtsystem oder Systemlandschaft)

Klassisch

  • N Monate entwickeln
  • M Monate integrieren
  • M = a *N^b (Bauchformel)
  • b > 1

Wo ist das Problem?

  • Es wird lange entwickelt
  • Nur Verifizierung (Kontrolle gegen Spezifikation)
  • Keine Validierung (Gemeinsame Nutzung der Komponenten)

Warum?

Integration ist aufwänding
Daher wird sie möglichst selten gemacht
Dadurch weiß niemand so recht wie es geht
Das macht Integration noch aufwändiger
Daher wird es noch seltener gemacht
Daher wissen die beteiligten noch schlechter wie es geht
...

Im Grunde Psychologie

Risiken in ferner Zukunft (Integration am Ende des Projektes) werden als kleiner wahrgenommen, als Risiken direkt vor einem (Integration heute Nachmittag)

Vergleich Arztbesuch

Ein Frau kommt zum Arzt und klagt über Schmerzen in der Brust.
Sie sei vor drei Tagen auf eine Harke getreten und der Stil ist Ihr heftig vor die Brust geschlagen.

Was ist die wahrscheinlichste Diagnose?
Und Warum?

What if?

Was, wenn wir jeden Monat integrieren?
Oder jede Woche?
Oder jeden Tag?
Oder nach jedem Commit?

If it hurts do it more often

http://en.wikipedia.org/wiki/File:OuchFlintGoodrichShot1941.jpg

Zwingende Vorraussetzungen

  • 1 sauberer Branch in der Versionsverwaltung
  • Alles muss automatisiert sein

=> Wenn alles automatisiert ist, ist die Integration kein Problem
=> Ergebnisse sind eindeutig und reproduzierbar

Continuous Integration


Stop the Line

Im Fehlerfall hat die Fehlerbehebung oberste Prorität
(inspiriert vom Toyota Production System)

  • Macht wiederkehrende Probleme sehr schmerzhaft
  • Alle sind für das Beheben des Problems verantwortlich
  • Beheben kann auch ein Revert des Commits sein

Da geht noch mehr



Wichtige Details

  • Schnelle Schritte zuerst für schnelles Feedback
  • Der erste Fehler führt zum Abbruch
  • Schritte können parallelisiert werden
  • Gegen den Integrationsbranch wird möglichst oft committed, aber nicht so oft wie gegen den lokalen Branch

Schneller ist Besser

  • Compile + Unit Tests < 10Minuten.
  • Erlaubt es dem Entwickler einen Kaffee zu trinken und auf das Ergebniss zu warten.
  • Langsame Tests werden dafür in spätere Build Schritte ausgelagert.

Deployables

  • Idealerweise erzeugt Compile deploybare Artefakte
  • Alternativ geschieht dies in einem nachgelagerten Build

Continuous Deployment


Smoke Test

Einfache Tests, die das korrekte Deployment sicherstellen

Systemtest

Testen das vollständige System mit Schnittstellen

Performance & Lasttest

  • Gegen realistische Datenvolumen
  • Auf Infrastruktur vergleichbar mit Produktion
  • Achtung: Produktionsdaten müssen evtl. bereinigt werden
  • Per Definition sehr Zeitaufwändig

Manuelle Test

  • Erst spät in der Build Pipeline
  • Testkandidat hat nachweislich hohe Qualität
  • Manuelle Test sind zu minimieren

Partielles Deployment

  • Neue Version wird z.B. auf 2 von 10 Knoten deployt
  • Benutzer Verhalten und Logs werden (automatisch) beobachtet
  • Bei Problemen, wird (automatisch) auf Vorversion gewechselt

Metriken

  • CI Tools produzieren viele Metriken
  • Metriken können helfen Aufwand zu steuern
  • Metriken können motivieren
  • Metriken können eine Menge Schaden an richten

DevOps

Automatismus von CI/CD angewandt auf Betriebssysteme & Co
  • Puppet / Chef
  • Systemkonfigurationen werden im Tool konfiguriert
  • Können beliebig oft eingespielt werden
  • Für das eigentliche Zielsystem
  • Testsysteme

Kein Produktionszugang

  • Keine direkten Änderungen auf Produktion
  • Alles geht über entsprechende Tools
  • Und Testsystem
  • Funktioniert nur mit entsprechendem Tooling

Die andere Hälfte

  • DevOps ist vor Allem Zusammenarbeit

Aufgabe


Welche Auswirkungen hat CI/CD für die Anwendung von Mobilen Anwendungen, die auf 2 Dutzend verschiedenen Plattformen laufen muss?

Softwaretechnik Lesson 9

By Jens Schauder

Softwaretechnik Lesson 9

  • 1,974