Continuous Delivery: Der pragmatische Einstieg
Von Eberhard Wolff
()
Über dieses E-Book
Dabei lernen Sie u.a. folgende Themen kennen:
• Infrastruktur-Automatisierung mit Chef, Docker und Vagrant
• Automatisierung von Builds und Continuous Integration
• Akzeptanztests, Kapazitätstests, exploratives Testen
• Einführung von Continuous Delivery im Unternehmen
• Continuous Delivery und DevOps
• Auswirkungen auf die Softwarearchitektur
Als praktisches Beispiel wird ein konkreter Technologie- Stack vorgestellt. Zahlreiche Aufgaben und Vorschläge für weitergehende Experimente laden Sie darüber hinaus zur praktischen Vertiefung des Themas ein.
Nach der Lektüre können Sie abschätzen, welche Vorteile Continuous Delivery konkret bietet, und Sie verfügen über das nötige Handwerkszeug, um Continuous Delivery in Ihrem eigenen Arbeitsumfeld zu etablieren.
Die Neuauflage wurde in Bezug auf Werkzeuge wie Docker, Jenkins, Graphite und den ELK-Stack aktualisiert. An neuen Themen sind Docker Compose, Docker Machine, Immutable Server, Microservices und die Einführung von Continuous Delivery ohne DevOps hinzugekommen.
Eberhard Wolff
PD Dr. rer. soc. Eberhard Wolff ist Wissenschaftlicher Mitarbeiter am Medizinhistorischen Institut und Museum der Universität Zürich und Privatdozent für Kulturanthropologie an der Universität Basel.
Mehr von Eberhard Wolff lesen
Jüdische Religion, Geschichte und Kultur Das Microservices-Praxisbuch: Grundlagen, Konzepte und Rezepte Bewertung: 0 von 5 Sternen0 Bewertungen
Ähnlich wie Continuous Delivery
Ähnliche E-Books
Basiswissen Testautomatisierung: Aus- und Weiterbildung zum ISTQB® Advanced Level Specialist – Certified Test Automation Engineer Bewertung: 0 von 5 Sternen0 BewertungenNebenläufige Programmierung mit Java: Konzepte und Programmiermodelle für Multicore-Systeme Bewertung: 0 von 5 Sternen0 BewertungenAgile Entwicklungspraktiken mit Scrum Bewertung: 4 von 5 Sternen4/5Software entwickeln mit Verstand: Was Sie über Wissensarbeit wissen müssen, um Projekte produktiver zu machen Bewertung: 4 von 5 Sternen4/5Funktionale Sicherheit in der Praxis: Anwendung von DIN EN 61508 und ISO/DIS 26262 bei der Entwicklung von Serienprodukten Bewertung: 0 von 5 Sternen0 BewertungenSpring Boot: Cloud-native Anwendungen mit Java und Kotlin erstellen Bewertung: 0 von 5 Sternen0 BewertungenBasiswissen Mobile App Testing: Aus- und Weiterbildung zum Certified Mobile Application Tester – Foundation Level Specialist nach ISTQB®-Standard Bewertung: 0 von 5 Sternen0 BewertungenSpring Boot 2: Moderne Softwareentwicklung mit Spring 5 Bewertung: 0 von 5 Sternen0 BewertungenJava – die Neuerungen in Version 9 bis 14: Modularisierung, Syntax- und API-Erweiterungen Bewertung: 0 von 5 Sternen0 BewertungenSoftwareentwicklungsprozess: Von der ersten Idee bis zur Installation Bewertung: 0 von 5 Sternen0 BewertungenKeyword-Driven Testing: Grundlage für effiziente Testspezifikation und Automatisierung Bewertung: 0 von 5 Sternen0 BewertungenBuchreihe: Produktivitätssteigerung in der Softwareentwicklung, Teil 2: Managementmodell, Aufwandsermittlung und KPI-basierte Verbesserung Bewertung: 0 von 5 Sternen0 BewertungenREST und HTTP: Entwicklung und Integration nach dem Architekturstil des Web Bewertung: 5 von 5 Sternen5/5Analyse und Durchführung eines Benchmarks von fachspezifischer Software für FMEA: Masterarbeit an der Hochschule Ravensburg-Weingarten Bewertung: 0 von 5 Sternen0 BewertungenLanglebige Software-Architekturen: Technische Schulden analysieren, begrenzen und abbauen Bewertung: 0 von 5 Sternen0 BewertungenPraxiswissen Softwaretest - Testmanagement: Aus- und Weiterbildung zum Certified Tester - Advanced Level nach ISTQB-Standard Bewertung: 0 von 5 Sternen0 BewertungenLean Testing für C++-Programmierer: Angemessen statt aufwendig testen Bewertung: 0 von 5 Sternen0 BewertungenAgile Scrum Handbuch Bewertung: 0 von 5 Sternen0 BewertungenHandbuch Infrastructure as Code: Prinzipien, Praktiken und Patterns für eine cloudbasierte IT-Infrastruktur Bewertung: 0 von 5 Sternen0 BewertungenBasiswissen Softwaretest: Aus- und Weiterbildung zum Certified Tester – Foundation Level nach ISTQB-Standard Bewertung: 0 von 5 Sternen0 BewertungenKubernetes Patterns: Wiederverwendbare Muster zum Erstellen von Cloud-nativen Anwendungen Bewertung: 0 von 5 Sternen0 BewertungenPraxiswissen Softwaretest - Test Analyst und Technical Test Analyst: Aus- und Weiterbildung zum Certified Tester - Advanced Level nach ISTQB-Standard Bewertung: 0 von 5 Sternen0 BewertungenBasiswissen Requirements Engineering: Aus- und Weiterbildung nach IREB-Standard zum Certified Professional for Requirements Engineering Foundation Level Bewertung: 0 von 5 Sternen0 BewertungenGraphQL: Eine Einführung in APIs mit GraphQL Bewertung: 0 von 5 Sternen0 BewertungenSoftware-Test für Embedded Systems: Ein Praxishandbuch für Entwickler, Tester und technische Projektleiter Bewertung: 0 von 5 Sternen0 BewertungenVaadin: Der kompakte Einstieg für Java-Entwickler Bewertung: 0 von 5 Sternen0 BewertungenSprechen Sie Java?: Eine Einführung in das systematische Programmieren Bewertung: 4 von 5 Sternen4/5Datenbankentwicklung lernen mit SQL Server 2022: Der praxisorientierte Grundkurs – auch für SQL Server Express Bewertung: 0 von 5 Sternen0 BewertungenReact: Grundlagen, fortgeschrittene Techniken und Praxistipps – mit TypeScript und Redux Bewertung: 0 von 5 Sternen0 Bewertungen
Softwareentwicklung & -technik für Sie
Projekt Unicorn: Der Roman. Über Entwickler, Digital Disruption und das Überleben im Datenzeitalter Bewertung: 0 von 5 Sternen0 BewertungenProgrammieren lernen mit Python 3: Schnelleinstieg für Beginner Bewertung: 0 von 5 Sternen0 BewertungenLean Production - Grundlagen: Das Prinzip der schlanken Produktion verstehen und in der Praxis anwenden. Schlank zur Wertschöpfung! Bewertung: 0 von 5 Sternen0 BewertungenDas große Python3 Workbook: Mit vielen Beispielen und Übungen - Programmieren leicht gemacht! Bewertung: 4 von 5 Sternen4/5Design Thinking für Anfänger: Innovation als Faktor für unternehmerischen Erfolg Bewertung: 0 von 5 Sternen0 BewertungenProjektmanagement für Anfänger: Grundlagen, -begriffe und Tools Bewertung: 0 von 5 Sternen0 BewertungenModellbasiertes Requirements Engineering: Von der Anforderung zum ausführbaren Testfall Bewertung: 0 von 5 Sternen0 BewertungenDigital Paintbook Volume 3 Bewertung: 5 von 5 Sternen5/5Das ERP als Erfolgsfaktor für Unternehmen: Grundlagen, innerbetriebliche Funktionen, E-Business, Auswahlmethode Bewertung: 0 von 5 Sternen0 BewertungenLean Management für Einsteiger: Grundlagen des Lean Managements für Kleine und Mittelständische Unternehmen – mit Vielen Praxisbeispielen Bewertung: 0 von 5 Sternen0 Bewertungen"Meisterhaft mit ChatGPT": "Der umfassende Leitfaden zur effektiven Nutzung von KI-gestützten Gesprächspartnern" Bewertung: 0 von 5 Sternen0 BewertungenEinstieg in Reguläre Ausdrücke Bewertung: 0 von 5 Sternen0 BewertungenSketchnotes in der IT: Abstrakte Themen mit Leichtigkeit visualisieren Bewertung: 0 von 5 Sternen0 BewertungenLean Management für Einsteiger: Erfolgsfaktoren für Lean Management – Lean Leadership & Co. als langfristige Erfolgsgaranten Bewertung: 0 von 5 Sternen0 BewertungenKnigge für Softwarearchitekten. Reloaded Bewertung: 0 von 5 Sternen0 BewertungenAgiles Coaching als Erfolgsfaktor: Grundlagen des Coachings, um Agile Teams erfolgreich zu managen Bewertung: 0 von 5 Sternen0 BewertungenKanban für Anfänger: Grundlegendes über den Einsatz von Kanban in der Industrie und der Softwareentwicklung Bewertung: 0 von 5 Sternen0 BewertungenWorkshops im Requirements Engineering: Methoden, Checklisten und Best Practices für die Ermittlung von Anforderungen Bewertung: 4 von 5 Sternen4/53D-Drucken für Einsteiger: Ohne Frust 3D-Drucker selbst nutzen Bewertung: 0 von 5 Sternen0 BewertungenAgiles Requirements Engineering und Testen Bewertung: 0 von 5 Sternen0 BewertungenKOMA-Script: eine Sammlung von Klassen und Paketen für LaTeX 2ε Bewertung: 0 von 5 Sternen0 BewertungenTidy First?: Mini-Refactorings für besseres Software-Design Bewertung: 0 von 5 Sternen0 BewertungenSoftwarearchitektur für Dummies Bewertung: 0 von 5 Sternen0 BewertungenLearning Management Systeme (LMS) im Vergleich: Open Source-Lösungen oder proprietäre Produkte? Bewertung: 0 von 5 Sternen0 BewertungenSystems Engineering mit SysML/UML: Anforderungen, Analyse, Architektur. Mit einem Geleitwort von Richard Mark Soley Bewertung: 0 von 5 Sternen0 BewertungenPersonal Kanban: Visualisierung und Planung von Aufgaben, Projekten und Terminen mit dem Kanban-Board Bewertung: 4 von 5 Sternen4/5Einfach Java: Gleich richtig programmieren lernen Bewertung: 0 von 5 Sternen0 BewertungenAgiles Projektmanagement: Scrum für Einsteiger Bewertung: 0 von 5 Sternen0 BewertungenGrundlagen und Methoden der Wirtschaftsinformatik: Eine anwendungsorientierte Einführung Bewertung: 0 von 5 Sternen0 BewertungenScrum: Schnelleinstieg Bewertung: 0 von 5 Sternen0 Bewertungen
Rezensionen für Continuous Delivery
0 Bewertungen0 Rezensionen
Buchvorschau
Continuous Delivery - Eberhard Wolff
1 Einleitung
1.1 Überblick über Continuous Delivery und das Buch
Continuous Delivery ermöglicht es, Software schneller und mit wesentlich höherer Zuverlässigkeit in Produktion zu bringen als bisher. Grundlage dafür ist eine Continuous-Delivery-Pipeline, die das Ausrollen der Software weitgehend automatisiert und so einen reproduzierbaren, risikoarmen Prozess für die Bereitstellung neuer Releases darstellt.
Woher kommt der Begriff Continuous Delivery?
Das agile Manifest (http://agilemanifesto.org) definiert als wichtigstes Ziel:
»Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.«
Die deutsche Übersetzung findet sich ebenfalls auf der Website:
»Unsere höchste Priorität ist es, den Kunden durch frühe und kontinuierliche Auslieferung wertvoller Software zufrieden zu stellen.«
Also ist Continuous Delivery eine Technik aus dem agilen Umfeld.
Dieses Buch erläutert, wie eine solche Pipeline praktisch aufgebaut werden kann und welche Technologien dazu eingesetzt werden können. Dabei geht es nicht nur um das Kompilieren und die Installation der Software, sondern auch um verschiedene Tests, die dazu dienen, die Qualität der Software abzusichern.
Das Buch zeigt außerdem, welche Auswirkungen Continuous Delivery auf das Zusammenspiel zwischen Entwicklung (Development) und Betrieb (Operations) im Rahmen von DevOps hat. Schließlich werden die Auswirkungen auf die Softwarearchitektur beschrieben. Neben der Theorie wird ein möglicher Technologie-Stack vorgestellt, der Build, Continuous Integration, Lasttests, Akzeptanztests und Monitoring abdeckt. Für die einzelnen Bestandteile des Technologie-Stacks gibt es jeweils ein Beispielprojekt, mit dem der Leser praktische Erfahrungen sammeln kann. Das Buch bietet einen Einstieg in den Technologie-Stack und zeigt außerdem auf, wie man sich mit den Themen tiefergehend beschäftigen kann.
Durch Experimente und Vorschläge zum selber Ausprobieren lädt es zur weiteren praktischen Vertiefung ein. Die Leser erhalten so Anregungen, wie sie sich weiter in die Themen vertiefen und eigene Erfahrungen sammeln können. So können die Beispielprojekte Basis für eigene Experimente oder für den Aufbau einer eigenen Continuous-Deployment-Pipeline sein.
Unter http://continuous-delivery-buch.de steht die Website zum Buch bereit mit Informationen, Errata und Links zu dem Beispiel.
1.2 Warum überhaupt Continuous Delivery?
Warum sollte man überhaupt Continuous Delivery einsetzen? Eine kleine Geschichte soll diese Frage beantworten – ob sie wahr ist oder nicht, bleibt offen.
Eine kleine Geschichte
Das Marketing eines Unternehmens – nennen wir es Raffzahn Online Commerce GmbH – hatte entschieden, den Registrierungsprozess auf der E-Commerce-Website zu überarbeiten. Dadurch sollten mehr Kunden gewonnen und der Umsatz erhöht werden. Also machte sich ein Entwicklerteam an die Arbeit. Nach nicht allzu langer Zeit waren sie fertig.
Zunächst mussten die Änderungen getestet werden. Dazu hatte das Team der Raffzahn Online Commerce GmbH in einem aufwendigen Prozess eine Testumgebung aufgebaut, auf der die Software manuell getestet wurde. Und es wurden tatsächlich Fehler gefunden. Mittlerweile waren die Entwickler aber schon bei dem nächsten Projekt und mussten sich wieder einarbeiten, bevor sie die Fehler mit einem Fix beheben konnten. Und wegen der manuellen Tests stellte sich bei einigen »Fehlern« heraus, dass die Tester nicht richtig getestet hatten oder die Fehler aus irgendwelchen Gründen nicht reproduzierbar waren.
Nun galt es, den Code in Produktion zu bringen. Der Prozess dazu war aufwendig – denn die E-Commerce-Website der Raffzahn Online Commerce GmbH war über die Jahre gewachsen und daher sehr komplex. Nur dieses eine Feature auszuliefern, rechtfertigte den Aufwand nicht. Daher wurde nur einmal pro Monat deployt. Schließlich konnte die Änderung zusammen mit den anderen Änderungen aus dem letzten Monat in Produktion gehen. Dazu war eine Nacht reserviert. Leider gab es beim Rollout einen Fehler. Das Team machte sich an die Arbeit, das Problem zu analysieren. Aber das war so schwierig, dass das System am nächsten Morgen nicht zur Verfügung stand. Zu diesem Zeitpunkt waren die Mitarbeiter übernächtigt und standen unter großem Stress – jede Minute Ausfall kostete bares Geld. Und zurück zur alten Version ging es nicht, weil einige Änderungen im Deployment nicht ohne Weiteres rückgängig gemacht werden konnten. Erst im Laufe des Tages, nach einer ausführlichen Fehleranalyse, konnte eine Task Force das Problem beheben und die Website stand wieder zur Verfügung. Der Fehler war eine Konfigurationsänderung gewesen, die in der Testumgebung vorgenommen, aber bei der Produktionseinführung vergessen worden war.
Also schien alles in Ordnung zu sein – aber es gab einen weiteren Fehler, der zunächst nicht entdeckt wurde. Dieser Fehler hätte eigentlich durch die manuellen Tests gefunden werden sollen. Der Test, der den Fehler gefunden hätte, wurde auch erfolgreich durchgeführt. Aber in der Testphase wurden auch einige Fehler gefixt und dieser Test wurde nur vor den Fixes durchgeführt. Der Fehler wurde erst durch einen der Fixes eingeführt. Nach den Fixes wurde der Test nicht noch einmal durchgeführt – daher konnte der Fehler es bis in die Produktion schaffen.
Am nächsten Tag stellte sich also mehr zufällig heraus, dass die Registrierung für die Website der Raffzahn Online Commerce GmbH gar nicht mehr funktionierte. Das war niemandem aufgefallen und erst, nachdem der erste potenzielle Kunde sich bei der Hotline meldete, wurde das Problem erkannt. Wie viele Registrierungen dieser Ausfall gekostet hatte, konnte leider niemand sagen – dazu fehlten Informationen über die Nutzung der Website. Wie schnell die optimierte Registrierung diesen Nachteil ausgleichen konnte, ist fraglich. So konnte es gut sein, dass die Änderung nicht wie ursprünglich geplant zu mehr Registrierungen, sondern zu weniger geführt hatte. Und außerdem war das neue Release wesentlich langsamer – ein Umstand, mit dem vorher auch niemand gerechnet hatte.
Und so begann die Raffzahn Online Commerce GmbH, die nächsten Features zu implementieren, um in einem Monat wiederum ein Update der Website auszurollen. Was wohl dieses Mal passieren würde?
Continuous Delivery hilft.
Continuous Delivery löst solche Probleme durch verschiedene Maßnahmen:
Es wird öfter deployt – bis hin zu mehreren Malen pro Tag. Dadurch wird die Zeit, bis ein neues Feature genutzt werden kann, verringert.
Durch häufige Deployments ist auch das Feedback auf neue Features und Code-Änderungen schneller. Die Entwickler müssen sich nicht erst wieder darauf besinnen, was sie vor einem Monat implementiert haben.
Um schneller zu deployen, müssen der Aufbau von Umgebungen und die Tests weitgehend automatisiert werden, da der Aufwand sonst zu hoch ist.
Die Automatisierung führt zu Reproduzierbarkeit: Wenn die Testumgebung erfolgreich aufgebaut werden kann, dann lässt sich mit demselben Automatismus auch die Produktion aufbauen – und zwar mit derselben Konfiguration. Das Problem durch die Fehlkonfiguration der Produktionsumgebung wäre also nicht aufgetreten.
Außerdem führt die Automatisierung zu mehr Flexibilität. Testumgebungen können On-Demand aufgesetzt werden. So kann es z.B. bei einem Redesign der Oberflächen zeitlich begrenzt eine separate Testumgebung für Marketing geben. Oder für großangelegte Lasttests können zusätzliche Umgebungen aufgesetzt werden, um eine produktionsnahe Umgebung zu haben, die nach den Tests wieder abgerissen werden, so dass keine dauerhaften Investitionen in Hardware notwendig sind – wenn beispielsweise eine Cloud genutzt wird.
Automatisierte Tests führen dazu, dass Fehler leichter reproduziert werden können. Da die exakt gleichen Schritte bei jedem Test ausgeführt werden, gibt es auch keine Fehler bei der Testdurchführung.
Wenn Tests automatisiert sind, können sie öfter ausgeführt werden. Also wäre der Fix durch den gesamten Testprozess gegangen und dieser Fehler nicht erst in Produktion aufgefallen.
Das Risiko eines neuen Release wird weiter reduziert, indem das Deployment in Produktion so aufgesetzt wird, dass es einen Weg zurück zur alten Version gibt. So wird der Produktionsausfall aus dem Beispiel verhindert.
Und schließlich sollten die Anwendungen auch ein fachliches Monitoring haben, so dass die Registrierung nicht ausfallen kann, ohne dass es jemand merkt.
Durch Continuous Delivery gewinnt das Business eine schnellere Verfügbarkeit neuer Features und eine zuverlässigere IT. Die Zuverlässigkeit ist auch für die IT nützlich. Nachts oder an Wochenenden unter hohem Stress neue Releases auszurollen und Fehler zu beheben, macht eben keinen Spaß. Und es ist sicher auch für die IT besser, wenn Fehler durch Tests auffallen und nicht erst in Produktion.
Um Continuous Delivery umzusetzen, gibt es eine Vielzahl an Technologien und Techniken. Continuous Delivery hat Auswirkungen bis hin zur Architektur der Anwendung. Genau um diese Themen geht es in diesem Buch. Am Ende steht ein schnellerer und zuverlässigerer Prozess, um Software in Produktion zu bringen.
1.3 Für wen ist das Buch?
Das Buch wendet sich an Manager, Architekten, Entwickler und Administratoren, die Continuous Delivery als Methodik und/oder DevOps als Organisationsform einführen wollen:
Manager lernen durch den theoretischen Teil Prozess, Erfordernisse und Vorteile von Continuous Delivery für ihr Unternehmen kennen. Außerdem können sie die technischen Konsequenzen von Continuous Delivery abschätzen.
Entwickler und Administratoren erhalten eine umfassende Einleitung in die technischen Aspekte und können damit die notwendigen Fähigkeiten erlernen, um Continuous Delivery umzusetzen und eine entsprechende Pipeline aufzubauen.
Architekten können neben den technischen Aspekten auch die Auswirkung auf die Softwarearchitektur kennenlernen – siehe dazu Kapitel 12.
Das Buch stellt verschiedene Technologien für die Umsetzung von Continuous Delivery vor. Als Beispiel dient ein Java-Projekt. Für einige technologische Bereiche – zum Beispiel für die Umsetzung von Akzeptanztests – sind für andere Programmiersprachen andere Technologien etabliert. Das Buch zeigt an den jeweiligen Stellen Alternativen auf, fokussiert aber auf Java. Technologien zur automatisierten Bereitstellung von Infrastrukturen sind unabhängig von der genutzten Programmiersprache. Das Buch ist besonders gut für Leser geeignet, die im Java-Umfeld aktiv sind – für andere Technologien müssen die Ansätze teilweise vom Leser selber transferiert werden.
1.4 Neu in der 2. Auflage
Die Neuauflage wurde in Bezug auf Werkzeuge wie Docker, Jenkins, Graphite und den ELK-Stack aktualisiert. An neuen Themen sind Docker Compose, Docker Machine, Immutable Server, Microservices und die Einführung von Continuous Delivery ohne DevOps hinzugekommen. Im Einzelnen:
Der neue Abschnitt 3.6 beschreibt das Konzept »Immutable Server«, bei dem Server niemals mit Updates versehen werden, sondern unveränderlich sind. Das macht Installationen einfacher reproduzierbar.
Docker ist ein sehr interessantes Werkzeug für das Deployment von Software. Docker Machine vereinfacht die Installation von DockerServern. Der neue Abschnitt 3.5.5 beschreibt Docker Machine. Mit Docker Compose können mehrere Docker Container zusammen installiert werden – das beschreibt der neue Abschnitt 3.5.7.
Continuous Delivery und DevOps haben viele Synergien – aber Continuous Delivery ist auch ohne DevOps möglich. Das beschreibt der neue Abschnitt 11.4.
Der neue Abschnitt 12.6 erläutert Microservices-Architekturen und die Beziehung zu Continuous Delivery.
Der ELK-Stack zum Speichern und zur Analyse von Logs in Abschnitt 9.3 nutzt die aktuelle Version von Elasticsearch (2.1), Logstash (2.1) und Kibana (4.3). Dabei hat sich die Installation, aber auch die Oberfläche geändert – deswegen waren auch Änderungen im Abschnitt »Experimente und selber ausprobieren« notwendig. Die Installation ist nun nicht nur mit Vagrant, sondern auch Docker Machine möglich.
Das Monitoring mit Graphite in Abschnitt 9.8 ist jetzt wesentlich besser modularisiert: Ein Docker-Container nimmt die Metriken entgegen, ein anderer bietet die Webschnittstelle zur Analyse der Daten. Auch hier kann das Beispiel nun mit Docker Machine statt Vagrant genutzt werden.
In der 2. Auflage wurden die Beispiele auf aktuelle Versionen der Werkzeuge umgestellt. Konkret:
Die Beispiel-VMs benutzen jetzt Ubuntu 15.04.
Die Beispielanwendung verwendet Spring Boot 1.3.0.
Das Chef-Beispiel in Abschnitt 3.3 wurde aktualisiert auf Chef 12, Java 1.8 und Tomcat 7
Docker aus Abschnitt 3.5 basiert jetzt auf Docker 1.10.
Selenium für GUI-Tests in Abschnitt 5.4 wird in der Version 2.48.2 verwendet.
JBehave für textuelle Akzeptanztests in Abschnitt 5.7 bezieht sich auf Version 3.9.5.
1.5 Übersicht über die Kapitel
Das Buch umfasst drei Teile. Der erste Teil legt die Grundlagen für ein Verständnis von Continuous Delivery:
Kapitel 2 führt den Begriff Continuous Delivery ein und zeigt auf, welche Probleme Continuous Delivery wie löst. Dabei wird eine Einführung in die Continuous-Delivery-Pipeline gegeben.
Für Continuous Delivery muss Infrastruktur automatisiert bereitgestellt werden – es muss Software auf Servern installiert werden. Kapitel 3 stellt dazu einige Ansätze vor. Chef dient zur Automatisierung von Installationen. Mit Vagrant können Testumgebungen auf Entwicklerrechnern eingerichtet werden. Docker ist nicht nur eine sehr effiziente Virtualisierungslösung, sondern kann auch zur automatisierten Installation von Software dienen. Schließlich wird noch ein Überblick über die Nutzung von PaaS-Cloud-Lösungen (Platform as a Service) für Continuous Delivery gegeben.
Es schließen sich im zweiten Teil Kapitel an, die einzelne Bestandteile einer Continuous-Delivery-Pipeline konkret beschreiben. Neben einer konzeptionellen Erläuterung werden jeweils beispielhaft konkrete Technologien dargestellt, mit denen dieser Teil der Pipeline umgesetzt werden kann:
Im Mittelpunkt von Kapitel 4 von Bastian Spannberg steht alles, was beim Commit einer neuer Softwareversion geschieht. Build-Werkzeuge wie Gradle oder Maven werden vorgestellt, ein Überblick über Unit-Tests wird gegeben und Continuous Integration mit Jenkins wird beleuchtet. Daran schließen sich statische Code Reviews mit SonarQube und Repositories wie Nexus oder Artifactory an.
Kapitel 5 zeigt mit JBehave und Selenium einen Ansatz für automatisierte GUI-basierte Akzeptanztests und für textuelle Akzeptanztests.
Performance deckt das Kapitel 6 durch Kapazitätstests ab. Als Beispieltechnologie wird Gatling genutzt.
Das explorative Testen (Kap. 7) dient dazu, manuell neue Features und generell Probleme in der Anwendung zu überprüfen.
Diese Kapitel betrachten den Anfang der Continuous-Delivery-Pipeline. Diese Phasen beeinflussen hauptsächlich die Softwareentwicklung. Die weiteren Kapitel stellen vor allem Techniken und Technologien vor, die bei den betriebsnahen Bereichen von Continuous Delivery nützlich sind:
Kapitel 8 zeigt Vorgehensweisen, die beim Rollout der Software in Produktion nützlich sind, um Risiken zu reduzieren.
Aus dem Betrieb der Anwendung können zahlreiche Daten erhoben werden, um so Feedback zu bekommen. Kapitel 9 stellt dazu Technologien vor: den ELK-Stack (Elasticsearch – Logstash – Kibana) für Log-Dateien-Analyse und Graphite für Monitoring.
Zu den Technologien aus diesen Kapiteln gibt es jeweils Beispiele zum selber Experimentieren und Nachvollziehen am eigenen Rechner. Dadurch können Leser sehr einfach eigene Erfahrungen sammeln. Dank Infrastrukturautomatisierung sind diese Beispiele auch auf dem eigenen Rechner recht einfach zum Laufen zu bringen.
Schließlich stellt sich die Frage, wie Continuous Delivery eingeführt werden kann und welche Auswirkungen Continuous Delivery hat. Das zeigt der dritte Teil des Buchs:
Kapitel 10 zeigt, wie Continuous Delivery in einer Organisation eingeführt werden kann.
DevOps beschreibt das Zusammenwachsen von Betrieb (Ops) und Entwicklung (Dev) zu einer Organisationseinheit (Kap. 11).
Continuous Delivery hat auch Auswirkungen auf die Architektur der Anwendungen. Diese Herausforderungen diskutiert Kapitel 12.
Am Ende steht das Fazit in Kapitel 13.
1.6 Pfade durch das Buch
Dieser Abschnitt erläutert die möglichen Lesepfade durch das Buch für die verschiedenen Zielgruppen – also welche Kapitel in welcher Reihenfolge gelesen werden sollten. Die Einführung in Kapitel 2 ist für alle Leser interessant – das Kapitel klärt grundlegende Begriffe und zeigt die Motivation für Continuous Delivery auf.
Die weiteren Kapitel haben unterschiedliche Ausrichtungen:
Für Techniker, die sich vor allem für die Entwicklung interessieren, sind die Kapitel rund um Commit und Tests interessant. In diesen Kapiteln geht es neben Entwicklung auch um Qualitätssicherung und Build. Die Kapitel zeigen, wie diese Aufgaben durch Continuous Delivery beeinflusst werden, und geben konkrete Code- und Technologiebeispiele aus dem Java-Bereich.
Administratoren und Betriebsmitarbeiter sollten sich mit Themen wie dem Deployment, dem Bereitstellen von Infrastrukturen und dem Betrieb auseinandersetzen, die ebenfalls durch Continuous Delivery beeinflusst werden.
Aus der Managementsicht sind die Einführung von Continuous Delivery und der Zusammenhang zwischen DevOps und Continuous Delivery interessant. Diese beiden Kapitel zeigen die Auswirkungen von Continuous Delivery auf die Organisation.
Schließlich ist der Architektur und dem Fazit jeweils noch ein Extra-Kapitel gewidmet.
Architekten sind eher breit aufgestellt. Sie werden sicher das Kapitel 12 über Architektur lesen, aber meistens interessieren sich Architekten auch für die technischen Details und die Managementsicht. Daher werden Architekten vermutlich mindestens ausgewählte Kapitel aus diesen Bereichen lesen.
Abb. 1–1
Pfade durch das Buch
1.7 Danksagung
Bedanken möchte ich mich bei Bastian Spannberg für seinen Beitrag zu diesem Buch. Außerdem gilt mein Dank den Reviewern, die mit ihren Kommentaren das Buch wesentlich beeinflusst haben: Marcel Birkner, Lars Gentsch, Halil-Cem Gürsoy, Felix Müller, Sascha Möllering und Alexander Papaspyrou. Bedanken möchte ich mich auch für die vielen Diskussionen – viele Gedanken und Ideen sind in solchen Dialogen entstanden.
Bedanken möchte ich mich auch bei meinem Arbeitgeber, der innoQ.
Schließlich habe ich meinen Freunden, Eltern und Verwandten zu danken, die ich für das Buch oft vernachlässigt habe – insbesondere meiner Frau.
Und natürlich gilt mein Dank all jenen, die an den in diesem Buch erwähnten Technologien gearbeitet haben und so die Grundlagen für Continuous Delivery gelegt haben.
Last but not least möchte ich dem dpunkt.verlag und René Schönfeldt danken, der mich sehr professionell bei der Erstellung des Buchs unterstützt hat.
Teil 1: Grundlagen
In diesem Teil des Buchs werden in Kapitel 2 die Grundlagen für ein Verständnis von Continuous Delivery gelegt. Die technischen Grundlagen von Continuous Delivery zeigt Kapitel 3: Hier geht es um den automatisierten Aufbau von Infrastrukturen und die automatische Installation von Software, ohne die Continuous Delivery nicht denkbar ist.
2 Continuous Delivery: Was und wie?
2.1 Was ist Continuous Delivery?
Diese Frage ist nicht so einfach zu beantworten. Die Erfinder des Begriffs geben in [6] keine echte Definition. Martin Fowler [7] stellt in den Mittelpunkt, dass die Software jederzeit in Produktion ausgeliefert werden kann. Dazu ist eine Automatisierung der Prozesse zur Installation der Software notwendig und Feedback über die Qualität der Software. Wikipedia hingegen spricht von einer Optimierung und Automatisierung des Software-Release-Prozesses [8].
Letztendlich geht es bei Continuous Delivery darum, den Prozess bis zum Release der Software zu betrachten und zu optimieren. Genau dieser Prozess wird oft bei der Entwicklung ausgeblendet.
2.2 Warum Software-Releases so kompliziert sind
Software-Releases sind eine Herausforderung – jede IT-Abteilung hat wohl schon ein Wochenende in der Firma verbracht, um ein Release in Produktion zu bringen. Oft enden solche Aktionen damit, dass die Software irgendwie in Produktion gebracht wird – weil ab einem bestimmten Punkt in dem Prozess der Weg zurück zur alten Version noch gefährlicher und schwieriger ist, als der Weg nach vorne. An die Installation des Release schließt sich häufig eine lange Phase an, in der das Release stabilisiert werden muss.
Continuous Integration macht Hoffnung.
Heutzutage ist das Release in Produktion ein Problem. Vor nicht allzu langer Zeit setzten die Probleme schon wesentlich früher an: Die einzelnen Teams arbeiteten an ihren Modulen und vor dem Release mussten die verschiedenen Versionen zunächst integriert werden. Wenn die Module das erste Mal zusammen genutzt werden sollten, kompilierte das System oft noch nicht einmal. Tage oder gar Wochen später waren dann erst alle Änderungen integriert und kompilierten erfolgreich. Dann erst konnten die Deployments beginnen. Diese Probleme sind heute meistens gelöst: Alle Teams arbeiten an einem gemeinsamen Versionsstand, der ständig automatisiert gemeinsam kompiliert und getestet wird. Dieses Vorgehen nennt man Continuous Integration. Die dafür notwendige Infrastruktur wird Kapitel 4 noch detailliert darstellen. Dass die Probleme dieser Phase gelöst sind, macht Hoffnung, dass die Probleme in den anderen Phasen hin zur Produktion ebenfalls lösbar sind.
Langsame und risikoreiche Prozesse
Die Prozesse in den späteren Phasen sind oft sehr komplex und aufwendig. Durch manuelle Prozesse sind sie außerdem langwierig und fehleranfällig. Das betrifft das Release in Produktion, aber auch die Phasen davor – also beispielsweise die verschiedenen Tests. Schließlich können gerade bei einem manuellen Prozess, der zudem nur ein paar Mal im Jahr ausgeführt wird, viele Fehler passieren – und das trägt zum Risiko bei.
Wegen des hohen Risikos und Aufwands werden Releases nicht besonders häufig in Produktion gebracht. Dadurch dauern die Prozesse noch länger, weil es keinen Übungseffekt gibt. Ebenso ist es schwierig, die Prozesse zu optimieren.
Schnell geht auch.
Auf der anderen Seite gibt es immer Möglichkeiten, im Notfall ein Release sehr schnell in Produktion zu bringen – wenn beispielsweise dringend ein Fehler behoben werden muss. Diese Prozesse umgehen aber jegliche Tests und damit die Sicherheitsnetze, die im normalen Prozess genutzt werden. Letztendlich ist das eine Risikomaximierung – die Tests werden ja aus einem Grund durchgeführt.
Also ist der normale Weg in die Produktion langsam und risikoreich – und im Notfall ist der Weg schnell, aber dafür noch risikoreicher.
2.3 Werte von Continuous Delivery
Mit der Motivation und den Ansätzen aus der Continuous Integration wollen wir den Weg für Releases in die Produktion optimieren.
Ein wesentliches Prinzip von Continuous Integration ist »If it hurts do it more often and bring the pain forward« – etwa: »Wenn es weh tut, tu es öfter und verlagere den Schmerz nach vorne.« Was sich wie Masochismus anhört, ist in Wirklichkeit ein Ansatz zur Problemlösung. Statt die Probleme bei den Releases zu umgehen, indem man möglichst wenig Releases in Produktion bringt, sollen die Prozesse so oft und so früh wie möglich durchgeführt werden, um sie möglichst schnell zu optimieren – in Bezug auf Geschwindigkeit und auf die Zuverlässigkeit. Continuous Delivery zwingt so die Organisation, sich zu ändern und eine andere Arbeitsweise zu adaptieren.
Überraschend ist der Ansatz eigentlich nicht: Wie schon erwähnt, kann jede IT-Organisation in kurzer Zeit einen Fix in Produktion bringen – und dabei werden meistens nur ein Teil der sonst üblichen Tests und Sicherheitsvorkehrungen ausgeführt. Das ist möglich, weil die Änderung nur klein ist und daher ein geringes Risiko hat. Hier zeigt sich ein anderer Ansatz für die Risikominimierung: Statt einer Absicherung über komplexe Prozesse und seltene Releases, kann man auch kleine Änderungen in Produktion bringen. Dieser Ansatz ist genau derselbe wie bei Continuous Integration (CI): Bei CI werden die Änderungen an der Software durch die einzelnen Entwickler und das Team ständig integriert und so häufig kleine Änderungen integriert, statt die Teams und Entwickler tage- oder wochenlang getrennt arbeiten zu lassen und die Änderungen am Ende zusammenzuführen – was meistens zu erheblichen Problemen führt, manchmal so sehr, dass die Software noch nicht einmal kompiliert werden kann.
Continuous Delivery ist aber mehr als »schnell und klein«. Continuous Delivery liegen verschiedene Werte zugrunde. Aus diesen Werten lassen sich die konkreten technischen Maßnahmen ableiten.
Regelmäßigkeit
Regelmäßigkeit bedeutet, Prozesse öfter durchzuführen. Alle Prozesse, die zur Auslieferung von Software notwendig sind, sollten regelmäßig durchgeführt werden – und nicht nur, wenn ein Release in Produktion gebracht werden muss. Beispielsweise ist es notwendig, Test- und Staging-Umgebungen aufzubauen. Die Testumgebungen können für fachliche oder technische Tests genutzt werden. Die Staging-Umgebung kann vom Endkunden genutzt werden, um die Features eines neuen Release auszuprobieren und zu evaluieren. Durch die Bereitstellung dieser Umgebungen kann der Prozess für den Aufbau einer Umgebung zu einem regelmäßigen Prozess werden, der nicht erst ausgeführt wird, wenn die Produktionsumgebung aufgebaut wird. Um diese Vielzahl von Umgebungen ohne allzu großen Aufwand zu erstellen, müssen die Prozesse weitgehend automatisiert werden. Regelmäßigkeit führt meistens zur Automatisierung. Ähnliches gilt für Tests: Es ist nicht sinnvoll, die notwendigen Tests bis kurz vor das Release zu verschieben – sie sollten lieber regelmäßig ausgeführt werden. Auch in diesem Fall erzwingt der Ansatz praktisch eine Automatisierung, um die Aufwände in Zaum zu halten. Regelmäßigkeit führt auch zu einer hohen Zuverlässigkeit – was ständig durchgeführt wird, kann zuverlässig wiederholt und durchgeführt werden.
Nachvollziehbarkeit
Alle Änderungen an der auszuliefernden Software und der dafür notwendigen Infrastruktur müssen nachvollziehbar sein. Es muss möglich sein, jeden Stand der Software und Infrastruktur zu rekonstruieren. Das führt zu einer Versionierung, die nicht nur die Software, sondern auch die notwendigen Umgebungen erfasst. Idealerweise ist es möglich, jeden Stand der Software zusammen mit der für den Betrieb notwendigen Umgebung in der richtigen Konfiguration zu erzeugen. Dadurch können alle