DevOps Übersicht

1. Übersicht

In diesem Artikel werden die Grundlagen der DevOps-Prinzipien und -Praktiken erläutert. Wir werden sehen, warum dies für die Softwareentwicklung relevant und hilfreich ist. Wir werden auch verstehen, wie wir DevOps sinnvoll einsetzen können und welche Tools uns auf diesem Weg helfen.

2. Historischer Kontext

Wir werden DevOps in seiner heutigen Form nicht schätzen können, ohne ein wenig in die Geschichte zurückzublicken. Die Anfänge der Softwareentwicklung waren hauptsächlich von der sogenannten Wasserfallmethode geprägt. Dies bedeutet effektiv, dass Software nacheinander konzipiert, entworfen, entwickelt, getestet und verteilt wurde .

Jeder Schritt war so detailliert wie möglich, da das Zurückgehen sehr kostspielig war . Was dies effektiv bedeutete, war eine viel höhere Wartezeit zwischen Denken und Handeln. Dies war jedoch kein Problem, da die Technologielandschaft viel weniger volatil war und Störungen viel zu weit verbreitet waren.

Interessanterweise hielt dieses Modell nicht lange. Als sich das Tempo der Technologie änderte und häufig Störungen auftraten, spürten die Unternehmen die Hitze. Sie brauchten neue Ideen, um schneller getestet zu werden . Dies bedeutete schnellere Änderungen in allen Aspekten des Geschäfts, einschließlich der Software.

Dies brachte eine völlig neue Welt von Softwareentwicklungsmethoden hervor, die unter dem Dach von Agile lose gesehen werden. Das agile Manifest enthält eine Reihe von Grundsätzen für die Softwarebereitstellung in kleinen Schritten mit einer schnelleren Rückkopplungsschleife . In der Praxis gibt es mehrere agile Frameworks wie Scrum und Kanban.

3. Was ist DevOps ?

Wir haben gesehen, dass die schrittweise Entwicklung mit schnellerem Feedback heute zum Eckpfeiler der Softwarebereitstellung geworden ist. Aber wie erreichen wir das? Während traditionelle agile Methoden uns zu einem vernünftigen Punkt führen, ist sie immer noch nicht ideal.

Agile Methoden verfeinern sich ständig, da sie ständig danach streben, Silos zu brechen.

Traditionell hatten wir immer verschiedene Teams, die für die Entwicklung und Bereitstellung von Software verantwortlich waren. Diese Teams arbeiteten oft in ihren Silos. Dies führte effektiv zu einem viel längeren Rückkopplungszyklus, was wir uns bei agilen Methoden nicht wünschen.

Es erfordert also nicht viel Argumentation, um zu verstehen, dass gut integrierte, funktionsübergreifende agile Teams viel besser geeignet sind, ihre Ziele zu erreichen. DevOps ist die Praxis, die die Kommunikation, Zusammenarbeit, Integration und Automatisierung zwischen Softwareentwicklungs- und Betriebsteams fördert . Dies ermöglicht es uns, eine schrittweise Entwicklung mit schnellerem Feedback zu realisieren.

Das folgende Diagramm erläutert einen möglichen Workflow zum Üben von DevOps:

Während wir später in diesem Tutorial die Details dieser Schritte durchgehen, wollen wir einige der wichtigsten Prinzipien von DevOps verstehen:

  • Wertorientierter Ansatz (wie vom Endbenutzer realisiert)
  • Kollaborative Kultur (mit effektiver Kommunikation, Prozessen und Werkzeugen)
  • Automatisierung von Prozessen (zur Steigerung der Effizienz und Reduzierung von Fehlern)
  • Messbare Ergebnisse (um an den Zielen zu messen)
  • Kontinuierliches Feedback (mit der Tendenz, sich schnell zu verbessern)

4. Wie starte ich die Reise?

Während die Theorie einfach und ansprechend ist, besteht die eigentliche Herausforderung darin, DevOps sinnvoll zu praktizieren. Wie wir bisher gesehen haben, geht es bei DevOps hauptsächlich um Menschen und nicht um Teams .

Gemeinsame Ziele, effektive Kommunikation und funktionsübergreifende Fähigkeiten zeichnen solche Teams aus. Da ein großer Teil dieser Veränderung kultureller Natur ist, ist sie oft langsam und nicht reibungslos.

4.1. Motivation

Nur weil es eine beliebte Praxis gibt, ist sie nicht unbedingt für uns geeignet. Wir müssen unsere Motivation für jede Veränderung verstehen - mehr noch, wenn wir uns in Richtung Agilität verändern. Es ist nützlich, die Ziele festzulegen, die wir erreichen möchten .

Die Ziele von DevOps in jeder Organisation hängen von den Ambitionen, der Kultur und der Reife dieser Organisation ab. Hier sind einige der allgemeineren DevOps-Ziele:

  • Bessere Erfahrung für Endbenutzer
  • Schnellere Markteinführung
  • Verbesserte mittlere Zeit bis zur Wiederherstellung

4.2. Annahme

Denken Sie daran, dass DevOps kein Endzustand ist, sondern ein kontinuierlicher Verbesserungsprozess, um die Ziele zu erreichen. Daher muss sich jeder im Team bemühen , Hindernisse zu identifizieren und sie schnell zu beseitigen . Hier sind einige Aktivitäten, die uns beim Einstieg helfen können:

  • Verstehen Sie den aktuellen Stand der Ideenfindung für den Produktionszyklus genau
  • Sammeln Sie einige der offensichtlichen Engpässe und verwenden Sie Metriken, um sachliche Entscheidungen zu treffen
  • Priorisieren Sie die Engpässe, die beim Entfernen den größten Mehrwert bringen
  • Definieren Sie einen iterativen Plan, um den Wert für priorisierte Elemente schrittweise bereitzustellen
  • Befolgen Sie die kurzen Zyklen von Develop-Deploy-Measure, um die Ziele zu erreichen

5. DevOps-Praktiken

Es gibt verschiedene Praktiken, aber die Idee sollte keine als Goldstandard verwenden. Wir sollten jede Praxis im Hintergrund unseres Zustands und unserer Ziele sorgfältig prüfen und dann fundierte Entscheidungen treffen. Fast alle Praktiken konzentrieren sich jedoch darauf, Prozesse so weit wie möglich zu automatisieren.

5.1. Agile Planung

Agile Planung ist die Praxis, die Arbeit in kurzen Schritten zu definieren. Obwohl das Endziel klar sein sollte, ist es nicht erforderlich, die gesamte Anwendung im Voraus zu definieren und zu detaillieren. Der Schlüssel hierbei ist die Priorisierung der Arbeit anhand des Werts, den sie liefern kann .

Dann sollte es in einer Iteration von kurzen, aber funktionierenden Inkrementen unterbrochen werden.

5.2. Infrastruktur als Code (IaC)

Dies ist die Praxis des Verwaltens und Bereitstellens der Infrastruktur über maschinenlesbare Konfigurationsdateien . Wir verwalten diese Konfigurationen auch in einem Versionskontrollsystem, wie wir unsere Codebasis verwalten. Es stehen viele domänenspezifische Sprachen zur Verfügung, um diese Konfigurationsdateien deklarativ zu erstellen.

5.3. Testautomatisierung

Das Testen von Software war traditionell eine manuelle Anstrengung, die häufig in Silos durchgeführt wurde. Dies passt nicht gut zu agilen Prinzipien. Daher ist es unerlässlich, dass wir versuchen , Softwaretests auf allen Ebenen zu automatisieren, z. B. Unit-Tests, Funktionstests, Sicherheitstests und Leistungstests .

5.4. Kontinuierliche Integration (CI)

Kontinuierliche Integration ist die Praxis, Arbeitscode häufiger in kleinen Schritten in einem gemeinsam genutzten Repository zusammenzuführen . Normalerweise werden in diesem gemeinsam genutzten Repository häufig automatisierte Builds und Überprüfungen ausgeführt, um uns so schnell wie möglich über Codebrüche zu informieren.

5.5. Kontinuierliche Lieferung / Bereitstellung (CD)

Kontinuierliche Lieferung ist die Praxis, Software in kleinen Schritten freizugeben, sobald alle Prüfungen bestanden wurden . Dies wird häufig zusammen mit der kontinuierlichen Integration praktiziert und kann von einem automatisierten Freigabemechanismus (als kontinuierliche Bereitstellung bezeichnet) profitieren.

5.6. Kontinuierliche Überwachung

Die Überwachung - möglicherweise das Zentrum von DevOps - ermöglicht schnellere Rückkopplungsschleifen. Die Ermittlung der richtigen Metriken zur Überwachung aller Aspekte der Software, einschließlich der Infrastruktur, ist von entscheidender Bedeutung . Die richtigen Metriken in Verbindung mit Echtzeit- und effektiven Analysen können dazu beitragen, Probleme schneller zu identifizieren und zu lösen. Darüber hinaus fließt es direkt in die agile Planung ein.

Diese Liste ist bei weitem nicht vollständig und wird ständig weiterentwickelt. Teams, die DevOps üben, finden ständig bessere Wege, um ihre Ziele zu erreichen. Einige der anderen erwähnenswerten Praktiken sind Containerisierung, Cloud-native Entwicklung und Microservices, um nur einige zu nennen.

6. Werkzeuge des Handels

Keine Diskussion über DevOps kann vollständig sein, ohne über die Tools zu sprechen. Dies ist ein Bereich, in dem es in den letzten Jahren zu einer Explosion gekommen ist. Möglicherweise gibt es ein neues Tool, wenn wir dieses Tutorial gelesen haben! Während dies gleichzeitig verlockend und überwältigend ist, ist Vorsicht geboten.

Wir dürfen unsere DevOps-Reise nicht als erstes mit Werkzeugen beginnen. Wir müssen unsere Ziele, Menschen (Kultur) und Praktiken erforschen und festlegen, bevor wir die richtigen Werkzeuge finden . Lassen Sie uns sehen, welche bewährten Tools uns zur Verfügung stehen.

6.1. Planung

Wie wir gesehen haben, beginnt ein ausgereiftes DevOps immer mit einer agilen Planung. Obwohl die Ziele klar sind, ist es nur erforderlich, die Arbeit für einige kurze Iterationen zu priorisieren und zu definieren. Das Feedback aus diesen frühen Iterationen ist von unschätzbarem Wert für die Gestaltung der zukünftigen und der gesamten Software. Ein effektives Werkzeug hier würde uns helfen, diesen Prozess mit Leichtigkeit durchzuführen.

Jira ist ein erstklassiges Produkt zur Problemverfolgung, das von Atlassian entwickelt wurde. Es verfügt über viele integrierte agile Planungs- und Überwachungstools. Es handelt sich größtenteils um ein kommerzielles Produkt, das wir entweder vor Ort ausführen oder als gehostete Anwendung verwenden können.

6.2. Entwicklung

Die Idee hinter Agile ist es, schneller Prototypen zu erstellen und Feedback zur eigentlichen Software einzuholen. Entwickler müssen Änderungen vornehmen und schneller zu einer freigegebenen Version der Software zusammengeführt werden. Noch wichtiger ist es, dass die Kommunikation zwischen den Teammitgliedern flüssig und schnell ist.

Schauen wir uns einige der allgegenwärtigen Tools in diesem Bereich an.

Git ist ein verteiltes Versionskontrollsystem. Es ist ziemlich beliebt und es gibt zahlreiche gehostete Dienste, die Git-Repositorys und Mehrwertfunktionen bereitstellen. Ursprünglich von Linus Torvalds entwickelt, macht es die Zusammenarbeit zwischen Softwareentwicklern sehr bequem.

Confluence ist ein von Atlassian entwickeltes Tool für die Zusammenarbeit . Zusammenarbeit ist der Schlüssel zum Erfolg für jedes agile Team. Die eigentliche Semantik der Zusammenarbeit ist ziemlich kontextbezogen, aber ein Werkzeug, das sich nahtlos bemüht, ist dennoch von unschätzbarem Wert. Confluence passt genau zu diesem Punkt. Darüber hinaus lässt es sich gut in Jira integrieren!

Slack ist eine von Slack Technologies entwickelte Instant Messaging-Plattform. Wie bereits erwähnt, sollten agile Teams in der Lage sein, zusammenzuarbeiten und zu kommunizieren, vorzugsweise in Echtzeit . Neben Instant Messaging bietet Slack viele Möglichkeiten zur Kommunikation mit einem einzelnen Benutzer oder einer Gruppe von Benutzern - und lässt sich gut in andere Tools wie Jira und GitHub integrieren!

6.3. Integration

Von Entwicklern zusammengeführte Änderungen sollten kontinuierlich auf Konformität überprüft werden. Was Compliance ausmacht, ist team- und anwendungsspezifisch. Es ist jedoch üblich, statische und dynamische Code-Analysen sowie funktionale und nicht funktionale metrische Messungen als Komponenten der Konformität zu betrachten.

Schauen wir uns kurz einige beliebte Integrationstools an.

Jenkins ist ein überzeugender Open-Source- und kostenloser Automatisierungsserver. Es ist seit Jahren in der Branche tätig und ausgereift genug, um ein breites Spektrum von Anwendungsfällen für die Automatisierung zu bedienen. Es bietet eine deklarative Möglichkeit, eine Automatisierungsroutine zu definieren, und verschiedene Möglichkeiten, sie automatisch oder manuell auszulösen. Darüber hinaus verfügt es über eine Vielzahl von Plugins, die verschiedene zusätzliche Funktionen zur Erstellung leistungsstarker Automatisierungs-Pipelines bieten.

SonarQube ist eine Open-Source-Plattform für die kontinuierliche Inspektion, die von SonarSource entwickelt wurde. SonarQube verfügt über zahlreiche statische Analyseregeln für viele Programmiersprachen. Dies hilft, Code-Gerüche so früh wie möglich zu erkennen. Darüber hinaus bietet SonarQube ein Dashboard, das andere Metriken wie Codeabdeckung, Codekomplexität und vieles mehr integrieren kann. Und es funktioniert gut mit Jenkins Server.

6.4. Lieferung

Es ist wichtig, Änderungen und neue Funktionen schnell an die Software zu liefern. Sobald wir festgestellt haben, dass die im Repository zusammengeführten Änderungen unseren Standards und Richtlinien entsprechen, sollten wir sie den Endbenutzern schnell bereitstellen können. Dies hilft uns, Feedback zu sammeln und die Software besser zu gestalten.

Hier finden Sie verschiedene Tools, mit denen wir einige Aspekte der Bereitstellung so weit automatisieren können, dass eine kontinuierliche Bereitstellung erreicht wird.

Docker ist ein weit verbreitetes Tool zum schnellen Containerisieren jeder Art von Anwendung. Es nutzt die Virtualisierung auf Betriebssystemebene, um Software in Paketen zu isolieren, die als Container bezeichnet werden. Die Containerisierung hat einen unmittelbaren Vorteil in Bezug auf eine zuverlässigere Softwarebereitstellung . Docker-Container kommunizieren über genau definierte Kanäle miteinander. Darüber hinaus ist dies im Vergleich zu anderen Isolationsmethoden wie virtuellen Maschinen ziemlich leicht.

Chef / Puppet / Ansible sind Konfigurationsmanagement-Tools. Wie wir wissen, ist eine tatsächlich ausgeführte Instanz einer Softwareanwendung eine Kombination aus dem Codebasis-Build und seinen Konfigurationen. Während der Codebasis-Build in verschiedenen Umgebungen häufig unveränderlich ist, sind Konfigurationen dies nicht. Hier benötigen wir ein Konfigurationsmanagement-Tool, um unsere Anwendung einfach und schnell bereitzustellen . Es gibt mehrere beliebte Werkzeuge in diesem Bereich, von denen jedes seine Macken hat, aber Chef, Puppet und Ansible decken die Grundlagen ziemlich genau ab.

HashiCorp Terraform kann uns bei der Bereitstellung der Infrastruktur helfen , was seit den Tagen privater Rechenzentren eine mühsame und zeitaufwändige Aufgabe ist. Mit der zunehmenden Einführung der Cloud wird die Infrastruktur jedoch häufig als verfügbares und wiederholbares Konstrukt angesehen. Dies kann jedoch nur erreicht werden, wenn wir über ein Tool verfügen, mit dem wir einfache bis komplexe Infrastrukturen deklarativ definieren und auf Knopfdruck erstellen können . Es mag wie eine Traumsequenz klingen, aber Terraform versucht aktiv, diese Lücke zu schließen!

6.5. Überwachung

Schließlich ist es wichtig, den Einsatz beobachten und an den Zielen messen zu können. Es kann eine Vielzahl von Metriken geben, die wir von Systemen und Anwendungen erfassen können. Dazu gehören einige der Geschäftsmetriken, die für unsere Anwendung spezifisch sind.

Die Idee dabei ist, diese Metriken nahezu in Echtzeit sammeln, kuratieren, speichern und analysieren zu können. In diesem Bereich sind mehrere neue Open Source- und kommerzielle Produkte erhältlich.

Elastic-Logstash-Kibana (ELK) ist ein Stapel von drei Open-Source-Projekten - Elasticsearch, Logstash und Kibana. Elasticsearch ist eine hoch skalierbare Such- und Analyse-Engine. Logstash bietet uns eine serverseitige Datenverarbeitungspipeline, die Daten aus einer Vielzahl von Quellen verarbeiten kann. Schließlich hilft uns Kibana bei der Visualisierung dieser Daten. Zusammen kann dieser Stapel verwendet werden , um Daten wie Protokolle aus allen Anwendungen zu aggregieren und in Echtzeit zu analysieren .

Prometheus ist ein Open-Source-Tool zur Systemüberwachung und -warnung, das ursprünglich von SoundCloud entwickelt wurde. Es wird mit einem mehrdimensionalen Datenmodell und einer flexiblen Abfragesprache geliefert und kann Zeitreihendaten über HTTP abrufen. Grafana ist eine weitere Open-Source-Analyse- und Überwachungslösung , die mit mehreren Datenbanken arbeitet. Zusammen können Prometheus und Grafana so ziemlich jede Metrik, die unsere Systeme produzieren können , in Echtzeit erfassen .

7. DevOps-Erweiterungen (oder sind sie es wirklich!)

Wir haben gesehen, dass DevOp im Grunde genommen ein kontinuierliches Bestreben ist, Hindernisse für eine schnellere und iterativere wertbasierte Bereitstellung von Software zu beseitigen. Eine der unmittelbaren Schlussfolgerungen ist nun, dass es hier keinen Endzustand geben kann.

Was die Leute als Reibung zwischen Entwicklungs- und Betriebsteams erkannten, ist nicht die einzige Reibung. Das Aufbrechen von Silos innerhalb einer Organisation, um die Zusammenarbeit zu verbessern, ist die zentrale Idee. Nun wurde den Leuten schnell klar, dass ähnliche Reibungen zwischen Entwicklungs- und Testteams sowie zwischen Entwicklungs- und Sicherheitsteams bestehen . Viele traditionelle Setups verfügen über dedizierte Sicherheits- und Leistungsteams.

Das volle Potenzial von DevOps kann erst ausgeschöpft werden, wenn wir fast alle Grenzen zwischen Teams durchbrechen und ihnen helfen können, viel effizienter zusammenzuarbeiten. Dies bedeutet von Natur aus , Teams wie Tests, Sicherheit und Leistung in den Bann zu ziehen .

Die Verwirrung liegt weitgehend in seiner Nomenklatur. DevOps macht uns klar, dass es hauptsächlich um Entwicklungs- und Betriebsteams geht. Daher sind im Laufe der Zeit neue Begriffe entstanden, die andere Teams umfassen. Aber im Großen und Ganzen wird DevOps nur effektiver realisiert!

7.1. DevTestOps

Der Eckpfeiler von DevOps ist die Bereitstellung hochwertiger Software in kleinen Schritten und häufiger. Die Betonung der Qualität hat hier viele Aspekte. In gewissem Sinne gehen wir oft davon aus, dass die von uns angewendeten DevOps-Praktiken uns dabei helfen werden, dies zu erreichen. Und es ist auch wahr, dass viele der zuvor diskutierten Praktiken darauf abzielen, jederzeit eine hohe Qualität sicherzustellen.

Funktionstests von Software haben jedoch einen viel größeren Umfang. Sehr oft tendieren wir dazu, Tests höherer Ordnung wie End-to-End-Tests gegen Ende der Softwarebereitstellung beizubehalten. Noch wichtiger ist, dass dies häufig in der Verantwortung eines separaten Teams liegt, das sich spät im Prozess engagiert. Hier beginnen die Dinge von den DevOps-Prinzipien abzuweichen.

Wir sollten lieber von Anfang an Softwaretests auf allen Ebenen integrieren . Software-Tests sollten bereits in der Planungsphase als integraler Bestandteil der Bereitstellung betrachtet werden. Darüber hinaus sollte dasselbe Team für die Entwicklung und das Testen der Software verantwortlich sein. Dies ist die Praxis von DevTestOps. Dies wird oft auch als kontinuierliches Testen und Verschieben nach links bezeichnet.

7.2. DevSecOps

Sicherheit ist ein wesentlicher Bestandteil jeder Softwareentwicklung und hat einen Teil der Komplexität. Dies bedeutet oft, dass wir ein separates Team von Sicherheitsspezialisten haben, mit denen wir zusammenarbeiten, sobald wir bereit sind, das Produkt zu versenden. Die Schwachstellen, die sie zu diesem Zeitpunkt identifizieren, können kostspielig sein. Dies stimmt wiederum nicht gut mit den Prinzipien von DevOps überein.

Zu diesem Zeitpunkt sollten wir bereits die Lösung haben, die wir anwenden müssen, und das heißt, wir sollten die Sicherheitsbedenken und das Personal früh im Spiel ansprechen . Wir sollten Teams motivieren, in jeder Phase über Sicherheit nachzudenken. Sicherheit ist zweifellos eine sehr spezialisierte Domäne, und daher müssen wir möglicherweise einen Spezialisten in das Team einbeziehen. Hier geht es jedoch darum, von Anfang an einige der Best Practices zu berücksichtigen.

Im weiteren Verlauf stehen verschiedene Tools zur Verfügung, mit denen das Scannen nach einer Vielzahl von Sicherheitslücken automatisiert werden kann . Wir können dies auch in unsere kontinuierlichen Integrationszyklen einbinden, um schnelles Feedback zu erhalten! Jetzt können wir nicht alles in die kontinuierliche Integration integrieren, da wir es leicht halten müssen, aber es können immer andere periodische Scans separat ausgeführt werden.

8. Fazit

In diesem Artikel haben wir die Grundlagen der DevOps-Prinzipien, -Praktiken und -Tools erläutert, die zur Verwendung verfügbar sind. Wir haben den Kontext verstanden, in dem DevOps relevant ist, und die Gründe, warum es für uns von Nutzen sein kann. Wir haben auch kurz besprochen, wo wir mit der Einführung von DevOps beginnen sollen.

Darüber hinaus haben wir einige der gängigen Praktiken und Werkzeuge angesprochen, die uns auf dieser Reise zur Verfügung stehen. Wir haben auch einige der anderen populären Begriffe rund um DevOps wie DevTestOps und DevSecOps verstanden.

Schließlich müssen wir verstehen, dass DevOps kein Endzustand ist, sondern eine Reise, die möglicherweise niemals endet! Aber der lustige Teil hier ist die Reise selbst. Währenddessen dürfen wir unsere Ziele nie aus den Augen verlieren und sollten uns auf die wichtigsten Prinzipien konzentrieren. Es ist ziemlich leicht, auf den Glanz eines beliebten Werkzeugs oder Begriffs in der Branche hereinzufallen. Wir müssen uns jedoch immer daran erinnern, dass alles nur dann nützlich ist, wenn es uns hilft, unserem Publikum einen effizienteren Wert zu bieten.