Con­ti­nuous Delivery (deutsch: „fort­wäh­ren­de Lieferung“) ist ein in­no­va­ti­ves Konzept der Software-Ent­wick­lung, das sich immer größerer Be­liebt­heit erfreut. Bei Con­ti­nuous Delivery sind die Pro­duk­ti­ons­schrit­te Ent­wick­lung, Qua­li­täts­si­che­rung und Aus­lie­fe­rung nicht endgültig, sondern wie­der­ho­len sich im Ent­wick­lungs­pro­zess immer wieder au­to­ma­tisch in einer Schleife, mittels der so­ge­nann­ten Con­ti­nuous Delivery Pipeline. Das hat den Vorteil, dass Sie Software-Produkte stück­wei­se und in kurzen In­ter­val­len einer Qua­li­täts­prü­fung un­ter­zie­hen und schon aus­lie­fern können, während Sie an dem Produkt noch wei­ter­ar­bei­ten. Dabei erhalten Sie in der Pipeline konstant Feedback, womit Sie die Software nach jeder Änderung am Quellcode sofort gezielt ver­bes­sern können.

De­fi­ni­ti­on: Con­ti­nuous Delivery

Con­ti­nuous Delivery ist ein Modell, das in der Software-Ent­wick­lung ein­ge­setzt wird, um Ent­wick­lung, Aus­lie­fe­rung, Feedback und Qua­li­täts­ma­nage­ment in kurzen In­ter­val­len in einer Dau­er­schlei­fe parallel laufen zu lassen. Dadurch gewinnt die Ent­wick­lung an Effizienz und der Kunde bekommt das Produkt früher, auch wenn dieses noch nicht fertig ist. Con­ti­nuous Delivery versorgt den Ent­wick­ler mit Feedback durch au­to­ma­ti­sier­te Tests, die meist nach jeder Änderung am Quellcode den Build prüfen.

Con­ti­nuous Delivery be­schreibt also einen wech­sel­sei­ti­gen Prozess, der Ent­wick­lung, Aus­lie­fe­rung, Feedback und Qua­li­täts­ma­nage­ment mit­ein­an­der vereint und au­to­ma­ti­siert. So mi­ni­mie­ren Sie lang­wie­ri­ge und auf­wen­di­ge Ar­beits­schrit­te.

Die Vorteile von Con­ti­nuous Delivery

In der klas­si­schen Software-Ent­wick­lung wird das End­pro­dukt erst aus­ge­lie­fert, wenn es alle an­vi­sier­ten Features enthält, pro­blem­los läuft und in der Qua­li­täts­über­prü­fung keine gra­vie­ren­den Mängel aufweist. An­schlie­ßend versorgt der Ent­wick­ler die Software meist mit Patches und Updates in mehr oder weniger re­gel­mä­ßi­gen Abständen. Bei Con­ti­nuous Delivery wird das Produkt in einem viel früheren Ent­wick­lungs­sta­di­um an den Kunden geliefert, noch während weiter daran ge­ar­bei­tet wird. Die Vor­ab­ver­si­on enthält oft nur die Kern­funk­tio­nen der Software, die dann vom Kunden in realer Umgebung getestet werden. Der Kunde (resp. der Software-Tester) selbst nimmt also einen we­sent­li­chen Platz in der Qua­li­täts­si­che­rung ein.

Das so gewonnene Feedback hilft dem Ent­wick­ler, noch während der Ent­wick­lung die vor­han­de­nen Features zu ver­bes­sern. Er bekommt womöglich auch wertvolle Hinweise darauf, welches Feature als nächstes ent­wi­ckelt werden sollte. Ohne Con­ti­nuous Delivery ist dieser Prozess durchaus mühsam und kann zu Unmut auf beiden Seiten führen: Der Kunde erwartet in aller Regel ein fertiges Produkt, das seinen An­for­de­run­gen und Wünschen genügt; der Ent­wick­ler weiß aber bis dahin noch gar nicht, welche das genau sind. Setzt die Kom­mu­ni­ka­ti­on über den Ent­wick­lungs­stand des Produkts bereits zu einem früheren Zeitpunkt ein, können Kun­den­wün­sche leichter be­rück­sich­tigt und Fehler vermieden werden. Das Prinzip lässt sich als Kreislauf ver­an­schau­li­chen:

Die drei Bereiche Ent­wick­lung, Qua­li­täts­si­che­rung und Pro­duk­ti­on lösen sich also nicht in einem ein­ma­li­gen Prozess ge­gen­sei­tig ab, sondern greifen fort­lau­fend in­ein­an­der. So durch­läuft das Produkt die einzelnen Phasen immer wieder und wird dabei kon­ti­nu­ier­lich ver­bes­sert. Bei einer großen Anzahl von Kunden ist dies nicht zu leisten ohne eine Au­to­ma­ti­sie­rung. Hier setzt Con­ti­nuous Delivery an, indem es den gesamten Prozess au­to­ma­ti­siert.

Jede Be­ar­bei­tung und Er­wei­te­rung der Software (also jede Änderung am Quellcode) können Sie dank Con­ti­nuous Delivery in Echtzeit testen lassen, um Feedback zu sammeln. Un­er­wünsch­te Ne­ben­ef­fek­te werden dadurch schnell sichtbar, sodass Sie in noch frühen Ent­wick­lungs­sta­di­en ein­grei­fen können. Das ist besonders praktisch, da Sie z. B. leichter fest­stel­len, welche Stelle im Code einen Bug ver­ur­sacht. Ohne Con­ti­nuous Delivery ist die Pro­blem­su­che oftmals sehr mühsam.

Auf dem Weg zum Kunden befindet sich die Software demnach in einem Zwi­schen­sta­di­um, der Con­ti­nuous Delivery Pipeline. In ihr werden sowohl manuelle als auch au­to­ma­ti­sier­te Tests durch­ge­führt. Jede Testphase zieht eine neue Software-Version nach sich (meist als „Beta-Version“ be­zeich­net, manchmal auch als „Nightly Build“, also eine au­to­ma­ti­siert ‚über Nacht‘ erstellte Version), die wiederum in die Pipeline gelangt. Erst wenn alle Tests er­folg­reich verlaufen und ein zu­frie­den­stel­len­des Feedback nach sich ziehen, wird eine ‚stabile‘ Version („Stable“) erstellt und das Produkt offiziell ver­öf­fent­licht (diesen Vorgang wie auch die pu­bli­zier­te Anwendung selbst nennt man „Release“). Die Wahr­schein­lich­keit, dass der Kunde dann ein feh­ler­frei­es Produkt erhält, ist ungleich höher.

Dies ist der größte Vorteil von Con­ti­nuous Delivery: Der au­to­ma­ti­sier­te Prozess be­güns­tigt sowohl den Kunden als auch den Ent­wick­ler. Für den Kunden ist das Produkt schneller verfügbar und in der Regel freier von Fehlern. Für Ent­wick­ler sind die ‚Feldtests‘ weitaus ef­fek­ti­ver als das be­triebs­in­ter­ne Beta-Testing, weil sie wert­vol­le­re Daten und Hinweise liefern. Der gesamte Ent­wick­lungs­pro­zess wird sehr viel flexibler und das Risiko, eine feh­ler­be­haf­te­te Software zu ver­öf­fent­li­chen, minimiert sich.

Übersicht: Die Vorteile und Nachteile von Con­ti­nuous Delivery

Vorteile Nachteile
Software-Fehler lassen sich schon im Ent­wick­lungs­pro­zess viel ef­fi­zi­en­ter finden und be­sei­ti­gen. Kos­ten­fak­tor: Ein starker und ver­läss­li­cher In­te­gra­ti­ons­ser­ver für die au­to­ma­ti­sier­ten Tests ist notwendig für eine gute und sichere Aus­lie­fe­rung des Produkts.
Der Aufwand eines klas­si­schen Software-Release entfällt größ­ten­teils. Die Ent­wick­ler können sich voll­stän­dig auf das tat­säch­li­che Ent­wi­ckeln kon­zen­trie­ren. Die au­to­ma­ti­sier­ten Tests müssen ge­schrie­ben werden und perfekt funk­tio­nie­ren. Feh­ler­haf­te Tests können großen Schaden bei der Qua­li­täts­prü­fung ver­ur­sa­chen.
Die Con­ti­nuous Delivery Pipeline er­leich­tert Ent­wick­lern die Arbeit bei der Feh­ler­su­che enorm. Erfordert eine gute Ab­stim­mung im Team, weil Code­än­de­run­gen häufig und effizient zu­sam­men­ge­tra­gen werden müssen.
Es entstehen weniger Kosten, die durch andere Test­pro­zes­se (z.B. Alpha- und Betatests) entstehen würden. Erfordert eine gute und kon­ti­nu­ier­li­che Kom­mu­ni­ka­ti­on mit Kunden und deren Ziel­sys­te­men.
Die Qua­li­täts­si­che­rung kann mehr Res­sour­cen auf die kon­zep­tu­el­le als auf die tech­ni­sche Ver­bes­se­rung der Software aufwenden. Der Kunde erwartet kon­ti­nu­ier­li­che Updates und Ver­bes­se­run­gen. Das Software-Projekt kann nur selten „pausiert“ werden.
Die Software-Ent­wick­lung geht grund­sätz­lich schneller voran, weil die Ent­wick­ler durch den größ­ten­teils au­to­ma­ti­sier­ten Release-Prozess entlastet werden und weniger Pausen einlegen müssen. Die Aus­lie­fe­rung von Neue­run­gen, Ver­bes­se­run­gen und Än­de­run­gen am Produkt erfolgt immer noch manuell. Um diesen Prozess zu au­to­ma­ti­sie­ren, muss zu Con­ti­nuous De­ploy­ment über­ge­gan­gen werden.
Schnel­le­re und häufigere Releases be­schleu­ni­gen die Schleife aus Feedback und Ver­bes­se­rung. Der Kunde muss Be­reit­schaft zeigen, eine Software zu benutzen, die sich noch in der Ent­wick­lung befindet. Er muss außerdem motiviert sein, wichtiges Feedback zu liefern.
Es entsteht für die Ent­wick­ler weniger Druck bei jeder Änderung im Quellcode, weil Fehler ent­spre­chend schnell gefunden werden. Das führt zu mo­ti­vie­ren­der und in­spi­rier­ter Arbeit.

Die Phasen der Con­ti­nuous Delivery Pipeline

Bei einer Änderung im Code wird die Con­ti­nuous Delivery Pipeline ge­trig­gert und der Test­pro­zess aus­ge­führt. Dies sind die Phasen, die die Con­ti­nuous Delivery Pipeline dabei durch­läuft:

  1. Commit Stage: In dieser ersten Testphase wird die Software-Version geprüft, die Software-Kom­po­nen­ten werden gebaut bzw. kom­pi­liert und not­wen­di­ge Unit-Tests durch­ge­führt. Nach er­folg­rei­chem Testing ist die Phase ab­ge­schlos­sen. Bi­när­ar­te­fak­te der Software-Kom­po­nen­ten werden im Bundle zu­sam­men­ge­fasst und im Re­po­si­to­ry abgelegt. Dieses Paket ist an­schlie­ßend maß­geb­lich für die Funk­tio­na­li­tät der Pipeline, weil es den Software-Stand bestimmt. Darüber hinaus umfasst das Paket schließ­lich die Da­ten­men­ge, die später auf dem Ziel­sys­tem in­stal­liert wird. Die Test­ergeb­nis­se in der Commit Stage lassen sich so den konkreten Än­de­run­gen im Quellcode zuordnen, was einen we­sent­li­chen Vorteil von Con­ti­nuous Delivery ausmacht.
     
  2. Ac­cep­tance Test Stage: In der zweiten Testphase erfolgen die Ak­zep­tanz­tests. Dazu gehören neben In­te­gra­ti­ons­tests (funk­tio­niert das Zu­sam­men­spiel der Kom­po­nen­ten?) die not­wen­di­gen Sys­tem­tests (funk­tio­niert die Software auf Be­nut­zer­sei­te?). Außerdem gibt es einige optionale Tests, die in die Ac­cep­tance Test Stage in­te­griert werden, etwa Per­for­mance-Tests und andere Tests, die die nicht­funk­tio­na­len An­for­de­run­gen der Software prüfen. Für die Ac­cep­tance Test Stage wird das in der vor­he­ri­gen Phase erstellte Bundle wei­ter­ver­wen­det und in einer passenden Test­um­ge­bung in­stal­liert.
     
  3. Even­tu­el­le Fehler oder Kom­pli­ka­tio­nen in diesen Phasen werden do­ku­men­tiert und, wenn nötig, als Feedback an den Ent­wick­ler geschickt. Das kann über E-Mail, Messaging-Programme oder spezielle Tools (s. u.) geschehen. Weil die Pipeline bei jeder Code­än­de­rung ausgelöst wird, beziehen sich Feh­ler­mel­dun­gen bzw. Re­gres­sio­nen hier immer auf die letzte Änderung. So kann der Ent­wick­ler schnell und effizient reagieren und even­tu­el­le Fehler beheben oder feh­ler­haf­ten Code nach­bes­sern.
     
  4. Je nach Bedarf werden nun manuelle Tests durch­ge­führt. Auch für diese Tests bedient sich die Pipeline des Bundles aus der ersten Phase und in­stal­liert dieses in einer ge­eig­ne­ten Test­um­ge­bung.
     
  5. Werden alle Tests mit positivem Feedback ab­ge­schlos­sen, kann das Paket auf dem Ziel­sys­tem manuell in­stal­liert werden. Dafür ist meist nur ein ‚Knopf­druck‘ notwendig. Ist dieser Schritt auch au­to­ma­ti­siert, spricht man von Con­ti­nuous De­ploy­ment.
Tipp: Deploy Now un­ter­stützt bei sta­ti­schen Websites

Sie möchten Ihre Ent­wick­lungs­pro­zes­se schlanker gestalten? Mit Deploy Now können Sie statische Websites ohne Umwege von GitHub auf IONOS geo­red­un­dan­te, DDoS-ge­schütz­te In­fra­struk­tur deployen. Legen Sie bequem Staging De­ploy­ments an um Än­de­run­gen vor dem Ausrollen live zu über­prü­fen und pro­fi­tie­ren Sie von einer au­to­ma­ti­schen SSL-Pro­vi­sio­nie­rung.

Con­ti­nuous In­te­gra­ti­on vs. Con­ti­nuous Delivery

In einem Atemzug zu Con­ti­nuous Delivery wird oft der Begriff Con­ti­nuous In­te­gra­ti­on genannt. Al­ler­dings gibt es einen we­sent­li­chen Un­ter­schied, der im Umfang liegt: Während Con­ti­nuous In­te­gra­ti­on die Au­to­ma­ti­sie­rung des Test­pro­zes­ses meint und den größten Teil der Pipeline mit Con­ti­nuous Delivery teilt, erweitert Con­ti­nuous Delivery das Konzept und sieht auch den Release-Prozess der Software als au­to­ma­ti­sier­ten Vorgang vor. Somit ergänzt Con­ti­nuous Delivery das Modell der Con­ti­nuous In­te­gra­ti­on um den End­be­nut­zer, indem es gleich­zei­tig zum Testen schon das Produkt liefert.

Ob ein Ent­wick­ler lediglich Con­ti­nuous In­te­gra­ti­on anwendet oder den Ent­wick­lungs­pro­zess auf Con­ti­nuous Delivery erweitert, hängt von der Ent­wick­lungs­pla­nung, dem Ent­wick­lungs­team und der Kun­den­ba­sis ab. Im Folgenden stellen wir beide Konzepte gegenüber:

Con­ti­nuous In­te­gra­ti­on (CI) Con­ti­nuous Delivery (CD)
Au­to­ma­ti­sier­ter Test­pro­zess, der jede Änderung im Quellcode einer kri­ti­schen Prüfung un­ter­zieht Erweitert den Test­pro­zess um den Aus­lie­fe­rungs­pro­zess. Neue­run­gen und Än­de­run­gen am Code landen au­to­ma­ti­siert beim End­be­nut­zer.
Das Team muss für jedes neue Feature, jede Ver­bes­se­rung und jede Code-Änderung au­to­ma­ti­sier­te Tests schreiben. Die Ef­fek­ti­vi­tät dieser Tests ist bei CD umso wichtiger, weil die Er­geb­nis­se un­mit­tel­ba­rer beim Endnutzer landen.
Verlangt einen de­di­zier­ten und kon­ti­nu­ier­li­chen In­te­gra­ti­ons­ser­ver, der die au­to­ma­ti­schen Tests überwacht und anwendet Auch die In­stal­la­ti­on auf dem Ziel­sys­tem muss möglichst au­to­ma­ti­siert erfolgen, was höhere An­for­de­run­gen an den Server stellt.
Ent­wick­ler müssen ihre Code-Än­de­run­gen kon­ti­nu­ier­lich und oft zu­sam­men­füh­ren. Ent­wick­ler müssen darüber hinaus einen guten Kun­den­kon­takt pflegen und bezüglich der Software möglichst trans­pa­rent sein.
Erfordert einen relativ hohen Res­sour­cen­auf­wand, um die Pro­dukt­qua­li­tät bei Aus­lie­fe­rung zu sichern Dieser Aufwand wird bei CD umso höher. Dafür kann das Produkt viel früher geliefert und ‚echten‘ Tests un­ter­zo­gen werden.
Die Ent­wick­lung an sich ist ef­fi­zi­en­ter, wird aber durch manuelle Releases häufiger pausiert. Es kann durch­ge­hend ent­wi­ckelt werden, weil auch der Release-Prozess größ­ten­teils au­to­ma­ti­siert ist.

Bekannte Tools für Con­ti­nuous Delivery

Ver­schie­de­ne Programme er­leich­tern Ihnen den Umstieg auf Con­ti­nuous Delivery. Wir stellen vier davon vor.

Jenkins

Jenkins ist eine Web­an­wen­dung, die die kon­ti­nu­ier­li­che In­te­gra­ti­on von Kom­po­nen­ten für Software er­mög­licht. Das Java-basierte Jenkins läuft dabei in be­lie­bi­gen EJB-Con­tai­nern und enthält neben un­ter­schied­li­chen Build-Tools (Apache Ant, Maven/Gradle, CVS, Sub­ver­si­on, Git u. a.) auch die für Con­ti­nuous Delivery wichtigen au­to­ma­ti­schen Test­ver­fah­ren (JUnit, Emma). Optionale Plug-ins sichern die Kom­pa­ti­bi­li­tät zu anderen Compilern. Die REST-basierte Pro­gram­mier­schnitt­stel­le erlaubt darüber hinaus, dass andere Programme auf Jenkins zugreifen können. Jenkins ist ein kos­ten­lo­ses Open-Source-Programm. Es wird vor allem für Anfänger empfohlen, weil Interface und Funk­tio­na­li­tät sehr ein­steig­er­freund­lich gestaltet sind.

CircleCI

CircleCI ist eine ebenfalls web­ba­sier­te Anwendung für Con­ti­nuous In­te­gra­ti­on, Delivery und De­ploy­ment. Dabei arbeitet CircleCI bevorzugt mit GitHub, GitHub En­ter­pri­se und Bitbucket. Außerdem bietet die Plattform viele prak­ti­sche Features wie Auf­trags­ma­nage­ment, Res­sour­cen­ma­nage­ment, Docker Support, Un­ter­stüt­zung aller bekannten Pro­gram­mier­spra­chen, sicheres Caching, Da­ten­ana­ly­se mit Sta­tis­ti­ken und um­fas­sen­de Si­cher­heits­kon­zep­te. CircleCI erhielt 2017 von Forrester die Aus­zeich­nung „Leader in Con­ti­nuous In­te­gra­ti­on“. Der erste Container ist kostenlos, ab dem zweiten fallen 50 US-Dollar pro Container und Monat an.

Microsoft Team Foun­da­ti­on Server

Microsoft Team Foun­da­ti­on Server (TFS) ist ein Kol­la­bo­ra­ti­ons­tool für Software-Projekte, die gemeinsam geplant, erstellt und an­schlie­ßend verwaltet werden sollen. TFS ist der in­of­fi­zi­el­le Nach­fol­ger von Mi­cro­softs Visual Source­Safe. Für das ge­mein­sa­me Arbeiten an einem Software-Projekt un­ter­stützt TFS ver­schie­de­ne Ent­wick­lungs­ver­fah­ren, darunter CMMI, agile Software-Ent­wick­lung und Scrum. Für die Arbeit werden in TFS die bekannten Office-Programme wie Word und Excel verknüpft und in­te­griert, sodass Sie von TFS nicht auf ein anderes Programm wechseln müssen.

Für Con­ti­nuous In­te­gra­ti­on, Delivery und De­ploy­ment stehen ver­schie­de­ne Features zur Verfügung, mit denen Sie eine Pipeline bauen. Grund­sätz­lich trennt TFS den gesamten Prozess in die Ab­schnit­te Ver­si­ons­kon­trol­le, Build, Reports und Be­nut­zer­ver­wal­tung.

Teams mit maximal 5 Personen benutzen die kos­ten­lo­se Express-Version, alle größeren Teams die kom­mer­zi­el­le Version, die etwa 6 US-Dollar pro Nutzer und Monat kostet. Dazu müssen Sie aber in der Regel auch eine Server-Lizenz erwerben. Sie können TFS auch ohne Mo­nats­abon­ne­ment erwerben; dafür müssen Sie al­ler­dings einen lokalen Händler kon­tak­tie­ren. Der Preis scheint zwischen 500 und 700 Euro zu schwanken.

Codeship

Codeship ist eine SaaS-Plattform für Con­ti­nuous In­te­gra­ti­on (und Delivery), die sich in ihrem Umfang an die Be­dürf­nis­se des Nutzers anpasst. Codeship un­ter­stützt GitHub und Bitbucket sowie GitLab. Die ver­füg­ba­ren Features richten sich dabei nach dem je­wei­li­gen Be­zahl­plan: In der kos­ten­lo­sen Version liefert Codeship eine vor­ein­ge­stell­te CI-Umgebung und kümmert sich auch um den Workflow, der bei CI/CD anfällt. Darüber hinaus erlaubt die kos­ten­lo­se Variante ef­fi­zi­en­tes Caching und par­al­le­les Testen von Builds in geteilten und vor­kon­fi­gu­rier­ten Con­tai­nern. Der kos­ten­lo­se Plan erlaubt 100 Builds pro Monat bei einem durch­gän­gi­gen Build sowie eine Test-Pipeline. Her­vor­zu­he­ben ist eine fehlende Ober­gren­ze für Projekte, Nutzer und Teams.

Um mehr aus Codeship her­aus­zu­ho­len, können Sie „Codeship Basic“ erwerben, das ab ca. 45 Euro/Monat er­hält­lich ist und abhängig von der Teamgröße teurer wird. Die ebenfalls kos­ten­pflich­ti­ge Version „Codeship Pro“ erweitert die Feature-Liste um einen Docker-Support, die „komplette Kontrolle“ über die Build-Umgebung, lokale Builds und eine bessere Kontrolle über den Workflow. Außerdem werden mehrere Tools zu­gäng­lich, die Con­ti­nuous In­te­gra­ti­on/Delivery noch ef­fi­zi­en­ter und trans­pa­ren­ter machen. Codeship Pro kostet je nach Anzahl der par­al­le­len Builds pro Monat ca. 70 Euro.

Domain kaufen
Re­gis­trie­ren Sie Ihre perfekte Domain
  • Inklusive 1 SSL-Wildcard-Zer­ti­fi­kat pro Vertrag
  • Inklusive Domain Lock
  • Inklusive Domain Connect für einfache DNS-Ein­rich­tung
Zum Hauptmenü