Mit der Cloud zu besserer Software-Qualität
Mehr Effizienz durch Pipelines
von Thomas Hafen - 31.03.2017
Der Weg durch die einzelnen Stadien der Software-Entwicklung ist umso leichter zu bewerkstelligen, je weniger abhängig die Applikation von Parametern der Laufzeitumgebung wie der Version des Applikations-Servers oder Betriebssystem-Patches ist. Dies lässt sich am besten dadurch erreichen, dass die Anwendung alle benötigten Informationen für Zielumgebungen wie Entwicklung, Test und Produktion selbst mitbringt. Auf dem Zielsystem wird dann lediglich der richtige Satz an Konfigurationsparametern aktiviert. Das kann durch eine Umgebungsvariable geschehen.
Alle notwendigen Automatisierungsschritte werden in einer sogenannten Continuous-Delivery-Pipeline zusammengefasst. Eine typische CD-Pipeline besteht aus dem Kompilieren der Anwendung, verschiedenen Tests, Release und Deployment. Zwischen den Abschnitten sorgt ein sogenanntes Quality-Gate dafür, dass die nächste Stufe erst durchlaufen werden kann, wenn die vorhergehende erfolgreich abgeschlossen wurde. Das stellt sicher, dass keine fehlerhafte Software in Produktion gelangt. Nach dem Prinzip Fail-Fast unterstützt die CD-Pipeline dabei ein schnelles Feedback auf Fehler in der Software. „Je früher ein Fehler gefunden wird, desto günstiger ist dessen Behebung“, sagt Michael Stähler von Opitz Consulting.
Neben den Konfigurationseinstellungen der verschiedenen Zielumgebungen benötigt eine Anwendung aber noch mehr Hilfe, um möglichst „self-contained“ lauffähig zu sein. Mit Hilfe von Spring Boot, einer Erweiterung des quelloffenen Java-Frameworks Spring, wird beispielsweise die gesamte Applikation inklusive ihrer Abhängigkeiten und einem Servlet-Container in ein als Fat-JAR oder Uber-JAR bezeichnetes Java-Archiv gepackt. „Diese Datei muss man dann nur noch auf das Zielsystem kopieren“, so Stähler.
Noch leichter lassen sich Anwendungen mit einem Container-System wie Docker von der Umgebung unabhängig machen. Das Docker-Image enthält alle für die Laufzeitumgebung notwendigen Informationen und Abhängigkeiten wie Betriebssystem, Patches und Konfigurationen. „Ich muss auf der Zielplattform nur noch Docker installieren, alles andere bringt der Container mit“, erklärt Stähler.
Continuous Integration und Delivery sind vor allem in der Entwicklung von Web-Applikationen sehr beliebt und weit verbreitet. Es gibt aber durchaus auch andere Anwendungsfälle: „CI und CD haben sich in einer ganzen Reihe überraschender Szenarien als nützlich erwiesen, die vom Mainframe bis zur Firmware-Entwicklung für Hardware reichen“, sagt Atlassian-Spezialist Buchanan. Um Continuous Integration und Continuous Delivery erfolgreich einzusetzen, seien allerdings ein Umdenken in den betroffenen Teams und gezielte Investitionen in Tools, Hardware und Personal notwendig. „Continuous Delivery billig und als Teilzeitprojekt eines Mitarbeiters einzuführen, ist das beste Rezept, Zeit und Geld in einen Fehlschlag zu investieren.“
Auch Brian Dawson von CloudBees warnt davor, Continuous Integration und Delivery auf die leichte Schulter zu nehmen: „Ausfälle oder Performance-Einbußen können erhebliche negative Auswirkungen auf die Auslieferung von Software an den Endkunden haben.“ CI- und CD-Systeme müssten deshalb performant, sicher, skalierbar und zuverlässig sein.