Close

DevOps-Pipeline

Eine DevOps-Pipeline besteht aus einer Reihe von automatisierten Prozessen und Tools, mit denen Entwickler und Operations-Fachleute gemeinsam an der Erstellung und Bereitstellung von Code für eine Produktionsumgebung arbeiten können.

Porträt von Krishna Sai
Tom Hall

DevOps-Fan und -Anwender


DevOps ist insofern eine bahnbrechende Bewegung, da sie die siloartige Organisationsstruktur revolutionierte, die Entwicklung und Operations voneinander trennte. Das Ergebnis ist ein kultureller Wandel, bei dem Entwickler und Operations-Fachleute zusammenarbeiten, Automatisierung nutzen, die Deployment-Geschwindigkeit erhöhen und flexibler arbeiten.

Die daraus resultierende DevOps-Struktur hat klare Vorteile: Teams, die DevOps-Praktiken anwenden, können ihre Deployment-Pipeline verbessern und rationalisieren, was die Häufigkeit und Auswirkungen von Vorfällen reduziert. Die DevOps-Praxis "you build it, you run it" wird aus gutem Grund schnell zur neuen Norm. Laut der Umfrage zu DevOps-Trends 2020 gaben fast alle Befragten (99 %) an, dass sich das DevOps-Konzept positiv auf ihr Unternehmen ausgewirkt hat. Fast die Hälfte verzeichnete eine schnellere Markteinführungszeit und eine verbesserte Deployment-Häufigkeit.

Die Implementierung von DevOps-Praktiken ist jedoch einfacher gesagt als getan. Um DevOps-Prinzipien erfolgreich umzusetzen, braucht es die richtigen Mitarbeiter, die richtige Kultur und die richtigen Tools.

Was ist die DevOps-Pipeline?


Eine DevOps-Pipeline besteht aus einer Reihe von automatisierten Prozessen und Tools, mit denen Entwickler und Operations-Fachleute gemeinsam an der Erstellung und Bereitstellung von Code für eine Produktionsumgebung arbeiten können. Eine DevOps-Pipeline kann zwar von Unternehmen zu Unternehmen unterschiedlich sein, umfasst aber in der Regel Build-Automatisierung/Continuous Integration, Automatisierungstests, Validierung und Berichterstattung. Sie kann auch ein oder mehrere manuelle Gates enthalten, die menschliches Eingreifen erfordern, bevor Code freigegeben werden kann.

Eine DevOps-Pipeline zeichnet sich vor allem durch die Eigenschaft "kontinuierlich" aus, was an den Begriffen Continuous Integration, Continuous Delivery/Deployment (CI/CD), kontinuierliches Feedback und Continuous Operations deutlich wird. Anstelle von einmaligen Tests oder geplanten Deployments wird jede Funktion fortlaufend ausgeführt.

Symbol: miteinander verbundene Ringe
Zugehöriges Material

Kostenlos loslegen

Werkzeugsymbol
Zugehöriges Material

Erfahre mehr über DevOps-Tools

Überlegungen zum Aufbau einer DevOps-Pipeline


Da es keine standardmäßige DevOps-Pipeline gibt, hängt das Design und die Implementierung einer DevOps-Pipeline im Unternehmen von dessen Technologie-Stack, der Erfahrung des DevOps Engineer, dem Budget und vielem mehr ab. Ein DevOps Engineer sollte über weitreichende Kenntnisse in den Bereichen Entwicklung und Operations verfügen, darunter Programmierung, Infrastrukturmanagement, Systemadministration und DevOps-Toolketten.

Außerdem verfügt jedes Unternehmen über einen anderen Technologie-Stack, was sich auf den Prozess auswirken kann. Wenn deine Codebasis beispielsweise node.js ist, spielt es eine Rolle, ob du eine lokale Proxy-NPM-Registry verwendest, den Quellcode herunterlädst und 'npm install' in jeder Phase der Pipeline ausführst oder diesen Schritt nur einmal durchführst und ein Artefakt erzeugst, das die Pipeline durchläuft. Oder wenn eine Anwendung containerbasiert ist, musst du entscheiden, ob du eine lokale oder eine Remote-Container-Registry verwendest, den Container einmal erstellst und ihn in der Pipeline verschiebst oder ihn in jeder Phase neu erstellst.

DevOps-Pipeline: Commit, Build, Unit-Tests, Merge in Trunk, Integrationstests, Staging, Regressionstests, Bereitstellung. Die Pipeline wird gestoppt, wenn ein Test in irgendeiner Phase fehlschlägt, und der Entwickler erhält Feedback.

Während jede Pipeline einzigartig ist, verwenden die meisten Unternehmen doch ähnliche grundlegende Komponenten. Für jeden Schritt wird das Erfolgspotenzial ermittelt, bevor zur nächsten Phase der Pipeline übergegangen wird. Bei Ausfällen wird die Pipeline gestoppt und dem Entwickler Feedback gegeben.

Komponenten einer DevOps-Pipeline


Continuous Integration/Continuous Delivery/Deployment (CI/CD)

Continuous Integration bezeichnet ein Verfahren, bei dem häufige Commits in ein gemeinsames Quellcode-Repository ausgeführt werden. Hierbei geht es um die kontinuierliche Integration von Codeänderungen in die vorhandene Codebasis, sodass Konflikte zwischen Codeänderungen von verschiedenen Entwicklern schnell erkannt werden und relativ einfach behoben werden können. Diese Vorgehensweise ist entscheidend für die Steigerung der Deployment-Effizienz.

Unserer Meinung nach ist die Trunk-basierte Entwicklung eine Voraussetzung für Continuous Integration. Wenn du in einem freigegebenen Quellcode-Repository keine häufigen Commits zu einem gemeinsamen Branch ausführst, ist das keine Continuous Integration. Wenn deine Build- und Testprozesse automatisiert sind, deine Entwickler jedoch an isolierten, langlebigen Feature-Branches arbeiten, die selten in einen gemeinsamen Branch integriert werden, ist das ebenfalls keine Continuous Integration.

Continuous Delivery stellt sicher, dass der Haupt- oder Trunk-Branch des Quellcodes einer Anwendung immer in einem releasefähigen Zustand ist. Anders ausgedrückt heißt das: Wenn das Management an einem Freitag um 16:30 Uhr an deinen Schreibtisch käme und sagen würde: "Wir müssen die neueste Version jetzt veröffentlichen", könnte diese Version auf Knopfdruck bereitgestellt werden – und das, ohne Angst vor Fehlern oder Ausfällen.

Deshalb solltest du eine Vorproduktionsumgebung haben, die mit der Produktionsumgebung nahezu identisch ist. So stellst du sicher, dass automatisierte Tests ausgeführt werden und dadurch jede Variable identifiziert wird, die einen Fehler verursachen könnte, bevor Code in den Haupt- oder Trunk-Branch gemergt wird.

Continuous Deployment bedeutet, dass ein Maß an kontinuierlichen Tests und Abläufe erreicht wird, das so stabil ist, dass neue Softwareversionen ohne menschliches Eingreifen validiert und in einer Produktionsumgebung bereitgestellt werden können.

Dies geschieht jedoch selten und ist in den meisten Fällen überflüssig. In der Regel sind es nur die Unternehmen mit Einhorn-Status, die Hunderte oder Tausende von Entwicklern haben und täglich viele Releases herausbringen, die ein solches Maß an Automatisierung benötigen oder sogar wünschen.

Um den Unterschied zwischen Continuous Delivery und Continuous Deployment zu verdeutlichen, stell dir die Delivery so vor, dass dir dein Postbote ein Paket übergibt, und das Deployment so, dass du das Paket öffnest und seinen Inhalt nutzt. Wenn zwischen dem Erhalt und Öffnen des Pakets eine Änderung des Produkts erforderlich wird, hat der Hersteller ein großes Problem!

Fortlaufendes Feedback

Der größte Schwachpunkt der alten Wasserfallmethode in der Softwareentwicklung – und der Grund, weshalb agile Methoden entwickelt wurden – war das Fehlen von zeitnahen Rückmeldungen. Wenn es Monate oder Jahre dauert, bis Features von der ersten Idee bis zur Implementierungsphase gelangen, konnte das Ergebnis einfach nicht mehr den Erwartungen der Kunden entsprechen. Mit agilen Methoden konnte sichergestellt werden, dass Entwickler schneller Feedback von Stakeholdern erhielten. Mit DevOps erhalten Entwickler jetzt kontinuierliches Feedback nicht nur von Stakeholdern, sondern auch durch systematische Tests und die Überwachung ihres Codes in der Pipeline.

Kontinuierliche Tests sind eine kritische Komponente jeder DevOps-Pipeline und eine der wichtigsten Voraussetzungen für kontinuierliches Feedback. In einem DevOps-Prozess verlagern sich Änderungen kontinuierlich von der Entwicklung über das Testen bis hin zum Deployment, was nicht nur zu schnelleren Releases, sondern auch zu einem qualitativ hochwertigeren Produkt führt. Dies bedeutet, dass du automatisierte Tests in deiner gesamten Pipeline durchführen musst, wie Unit-Tests, die bei jeder Build-Änderung ausgeführt werden, sowie Smoke-Tests, Funktionstests und End-to-End-Tests.

Kontinuierliche Überwachung ist ein weiterer wichtiger Bestandteil des kontinuierlichen Feedbacks. Ein DevOps-Ansatz umfasst die kontinuierliche Überwachung in den Staging-, Test- und sogar Entwicklungsumgebungen. Manchmal ist es sinnvoll, Vorproduktionsumgebungen auf anomales Verhalten zu überwachen. Doch im Allgemeinen wird dieser Ansatz für die kontinuierliche Bewertung des Zustands und der Leistung von Anwendungen in der Produktion genutzt.

Es gibt zahlreiche Tools und Services, um diese Funktionalität bereitzustellen. Und dies kann alles umfassen – von der Überwachung deiner Vor-Ort- oder Cloud-Infrastruktur wie Serverressourcen, Netzwerke usw. oder der Leistung deiner Anwendung oder ihrer API-Schnittstellen.

Continuous Operations

Continuous Operations ist ein relativ neuer und weniger gebräuchlicher Begriff, der unterschiedlich definiert wird. Man könnte ihn einerseits als "kontinuierliche Verfügbarkeit" interpretieren. Das ist beispielsweise bei einer Blau/Grün-Deployment-Strategie der Fall, bei der du zwei separate Produktionsumgebungen hast: eine "blaue" (öffentlich zugänglich) und eine "grüne" (nicht öffentlich zugänglich). In dieser Situation würde neuer Code in der grünen Umgebung bereitgestellt. Und wenn sich dieser als funktionsfähig erweist, würde ein Schalter umgelegt (normalerweise auf einem Load Balancer) und der Datenverkehr vom blauen System zum grünen umgeleitet. Auf diese Weise gibt es keine Ausfallzeiten für die Endbenutzer.

Man kann Continuous Operations aber auch als kontinuierliche Alarmierung auffassen. Dabei wird davon ausgegangen, dass Techniker Bereitschaftsdienst haben und benachrichtigt werden, wenn in der Anwendung oder Infrastruktur Leistungsanomalien auftreten. In den meisten Fällen geht die kontinuierliche Alarmierung mit einer kontinuierlichen Überwachung einher.

Fazit


Bei DevOps geht es darum, Softwareentwicklung, -Deployment und -betrieb zu rationalisieren. In der DevOps-Pipeline werden diese Ideen in die Praxis umgesetzt, weshalb von der Code-Integration bis zum Anwendungsbetrieb das Motto "Continous Everything" gilt.

Um mehr über Continuous Delivery zu erfahren, solltest du dir unsere Tutorials zu Continuous Delivery mit Bitbucket ansehen. Mit Bitbucket kannst du mit integrierter CI/CD Code erstellen, testen und bereitstellen. Diese Tutorials helfen Einsteigern und Profis, Continuous Delivery mit Bitbucket zu erreichen. Möchtest du gleich loslegen? Dann nutze die kostenlose Testversion von Bitbucket Pipelines.

Tom Hall
Tom Hall

Tom Hall ist ein DevOps-Befürworter und -Anwender, begeisterter Leser und Amateurpianist.
In den letzten 20 Jahren hat er u. a. Zertifikate von Novell, EMC, VMware und AWS erhalten. Im Jahr 2016 half er bei der Organisation der DevOpsDays in Atlanta und in den folgenden Jahren in Austin, Texas.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Abbildung: DevOps

DevOps-Community

Abbildung: DevOps

Simulations-Workshop

Abbildung: Karte

Kostenlos loslegen

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up