
Erstellung der ersten DevOps-Pipeline in fünf Schritten für Anfänger.
DevOps ist zur Wunderwaffe gegen zu langsame, fragmentierte und andere problematische Entwicklungsprozesse geworden. Aber es sind minimale Kenntnisse in DevOps erforderlich. Hier werden Konzepte wie die DevOps-Pipeline und deren Erstellung in fünf Schritten behandelt. Dies ist kein vollständiger Leitfaden, sondern lediglich eine „Skizze“, die erweitert werden kann. Lassen Sie uns mit der Geschichte beginnen.
Mein Einstieg in DevOps
Früher arbeitete ich mit Clouds bei Citi Group und entwickelte eine IaaS-Webanwendung zur Verwaltung der Cloud-Infrastruktur von Citi. Aber ich war immer daran interessiert, wie man die Entwicklungs-Pipeline optimieren und die Kultur unter den Entwicklern verbessern kann. Greg Lavender, unser technischer Direktor für Cloud-Architektur und -Infrastruktur, empfahl mir das Buch . Es erklärt die Prinzipien von DevOps hervorragend und liest sich wie ein Roman.
In der Tabelle auf der Rückseite wird gezeigt, wie oft Unternehmen neue Versionen veröffentlichen:
Wie schaffen es Amazon, Google und Netflix, so viele Releases herauszubringen? Ganz einfach: Sie haben verstanden, wie man eine nahezu perfekte DevOps-Pipeline erstellt.
Bei uns bei Citi war alles ganz anders, bis wir auf DevOps umgestiegen sind. Damals hatte mein Team verschiedene Umgebungen, aber die Bereitstellung auf den Entwicklungserver geschah manuell. Alle Entwickler hatten nur Zugang zu einem einzigen Entwicklungserver, der auf IBM WebSphere Application Server Community Edition basierte. Bei gleichzeitigen Bereitstellungsversuchen fiel der Server aus, und wir mussten jedes Mal „schmerzhafte“ Kompromisse finden. Außerdem hatten wir eine unzureichende Testabdeckung des Codes, einen zeitaufwändigen manuellen Bereitstellungsprozess und keine Möglichkeit, die Codebereitstellung anhand bestimmter Aufgaben oder Anforderungen des Kunden nachzuverfolgen.
Es war klar, dass schnell etwas getan werden musste, und ich fand einen gleichgesinnten Kollegen. Wir beschlossen, gemeinsam die erste DevOps-Pipeline zu erstellen – er richtete die virtuelle Maschine und den Tomcat-Anwendungsserver ein, während ich mich um Jenkins, die Integration mit Atlassian Jira und Bitbucket sowie die Testabdeckung kümmerte. Das Projekt war erfolgreich: Wir automatisierten die gesamte Entwicklungs-Pipeline, erreichten nahezu 100 % ununterbrochene Verfügbarkeit des Entwicklungservers, konnten die Testabdeckung nachverfolgen und verbessern, und der Git-Branch konnte an die Bereitstellung und die Jira-Aufgabe gebunden werden. Die meisten Werkzeuge, mit denen wir die DevOps-Pipeline aufbauten, waren Open Source.
Tatsächlich war die Kette vereinfacht, da wir nicht einmal erweiterte Konfigurationen mit Jenkins oder Ansible verwendet haben. Aber wir haben es geschafft. Möglicherweise ist das eine Folge des Prinzips (auch bekannt als 80/20 Regel).
Kurze Beschreibung der DevOps- und CI/CD-Kette
DevOps hat verschiedene Definitionen. DevOps, wie auch Agile, umfasst verschiedene Disziplinen. Aber die meisten würden der folgenden Definition zustimmen: DevOps ist eine Methode oder ein Lebenszyklus der Softwareentwicklung, deren Hauptprinzip darin besteht, eine Kultur zu schaffen, in der Entwickler und andere Mitarbeiter "auf derselben Wellenlänge" sind, manuelle Tätigkeiten automatisiert werden, jeder das tut, was er am besten kann, die Häufigkeit der Lieferungen steigt, die Produktivität zunimmt und die Flexibilität erhöht wird.
Und obwohl allein Tools nicht ausreichen, um eine DevOps-Umgebung zu schaffen, sind sie unerlässlich. Das wichtigste von ihnen ist die kontinuierliche Integration und kontinuierliche Lieferung (CI/CD). In der Kette gibt es für jede Umgebung verschiedene Phasen (zum Beispiel DEV (Entwicklung), INT (Integration), TST (Test), QA (Qualitätssicherung), UAT (Benutzertests), STG (Vorbereitung), PROD (Nutzung)), manuelle Aufgaben werden automatisiert, Entwickler können qualitativ hochwertigen Code erstellen, ihn bereitstellen und sich leicht anpassen.
Dieser Hinweis beschreibt, wie man in fünf Schritten eine DevOps-Kette aufbaut, wie im Bild unten gezeigt, mit Hilfe von Open-Source-Tools.
Kommen wir zur Sache.
Schritt 1: CI/CD-Plattform
Zunächst benötigen Sie ein CI/CD-Tool. Jenkins ist ein Open-Source-CI/CD-Tool, das in Java geschrieben ist und mit einer MIT-Lizenz versehen ist, das die Popularisierung der DevOps-Bewegung eröffnet hat und de facto zum Standard für CI/CD geworden ist.
Was ist Jenkins? Stellen Sie sich vor, Sie haben eine magische Fernbedienung für verschiedene Dienste und Tools. An sich ist ein CI/CD-Tool wie Jenkins nutzlos, aber in Kombination mit verschiedenen Tools und Diensten wird es allmächtig.
Neben Jenkins gibt es viele andere Open-Source-Tools, wählen Sie eines davon aus.
So sieht der DevOps-Prozess mit einem CI/CD-Tool aus
Sie haben ein CI/CD-Tool auf Ihrem localhost, aber im Moment gibt es nichts zu tun. Lassen Sie uns zum nächsten Schritt übergehen.
Schritt 2: Versionsverwaltung
Der beste (und wahrscheinlich einfachste) Weg, die Magie eines CI/CD-Tools zu überprüfen, besteht darin, es mit einem Versionskontrollsystem (Source Control Management, SCM) zu integrieren. Warum benötigt man Versionskontrolle? Angenommen, Sie erstellen eine Anwendung. Sie schreiben sie in Java, Python, C++, Go, Ruby, JavaScript oder einer anderen Sprache, die es im Überfluss gibt. Das, was Sie schreiben, wird Quellcode genannt. Zunächst, insbesondere wenn Sie allein arbeiten, können Sie alles in einem lokalen Verzeichnis speichern. Aber wenn das Projekt wächst und mehr Leute mitarbeiten, benötigen Sie eine Möglichkeit, Änderungen im Code zu teilen und gleichzeitig Konflikte beim Zusammenführen der Änderungen zu vermeiden. Außerdem müssen Sie eine Möglichkeit haben, frühere Versionen ohne Backups wiederherzustellen und das copy-paste-Verfahren für Code-Dateien zu vermeiden.
Hier kommt SCM ins Spiel. SCM speichert den Code in Repositories, verwaltet seine Versionen und koordiniert ihn unter den Entwicklern.
Es gibt viele SCM-Tools, aber de facto ist Git der Standard geworden. Ich empfehle, genau dieses zu verwenden, aber es gibt auch andere Optionen.

So sieht die DevOps-Pipeline nach der Hinzufügung von SCM aus.
Das CI/CD-Tool kann das Hoch- und Runterladen von Quellcode und die Zusammenarbeit im Team automatisieren. Nicht schlecht? Aber wie machen wir daraus jetzt eine funktionierende Anwendung, die von Milliarden Nutzern geliebt wird?
Schritt 3: Automatisierungstool für den Build-Prozess
Es läuft alles nach Plan. Sie können den Code hochladen und Änderungen im Versionskontrollsystem erfassen und auch Freunde einladen, mit Ihnen zu arbeiten. Aber Sie haben noch keine Anwendung. Damit es eine Webanwendung wird, muss sie kompiliert und in ein Paket zur Bereitstellung oder als ausführbare Datei gestartet werden. (Ein interpretierter Programmiersprache, wie JavaScript oder PHP, muss nicht kompiliert werden.)
Verwenden Sie ein Automatisierungstool für den Build-Prozess. Egal welches Tool Sie wählen, es wird den Code im erforderlichen Format zusammenstellen und die Reinigung, Kompilierung, Testung und Bereitstellung automatisieren. Die Build-Tools variieren je nach Sprache, aber meist werden folgende Open-Source-Varianten verwendet.

Ausgezeichnet! Lassen Sie uns nun die Konfigurationsdateien des Automatisierungstools für den Build-Prozess in das Versionskontrollsystem einfügen, damit das CI/CD-Tool sie zusammenbauen kann.
Es scheint alles in Ordnung zu sein. Aber wo bringen wir das jetzt hin?
Schritt 4: Server für Webanwendungen
Also haben Sie eine gepackte Datei, die ausführbar oder bereitstellbar ist. Damit die Anwendung wirklich nützlich ist, sollte sie irgendeinen Service oder ein Interface haben, aber Sie müssen das alles irgendwo unterbringen.
Eine Webanwendung kann auf einem Anwendungsserver bereitgestellt werden. Der Anwendungsserver bietet eine Umgebung, in der die Programmlogik aus dem Paket ausgeführt, das Interface gerendert und Webdienste über Sockets geöffnet werden können. Sie benötigen einen HTTP-Server und einige andere Umgebungen (wie eine virtuelle Maschine), um den Anwendungsserver einzurichten. Lassen Sie uns vorerst so tun, als hätten Sie alles während des Prozesses im Griff (obwohl ich später über Container sprechen werde).
Es gibt einige offene Anwendungsserver.
Wir haben bereits eine nahezu funktionierende DevOps-Kette erstellt. Großartige Arbeit!
Im Prinzip könnte man hier aufhören, von nun an schaffen Sie es alleine, aber es lohnt sich, auch über die Codequalität zu sprechen.
Schritt 5: Testabdeckung
Tests zu erstellen, kostet viel Zeit und Mühe, aber es ist besser, Fehler sofort zu finden und den Code zu verbessern, um die Endbenutzer zu erfreuen. Für diesen Zweck gibt es viele offene Werkzeuge, die nicht nur den Code testen, sondern auch Tipps geben, wie man ihn verbessern kann. Die meisten CI/CD-Tools können sich mit diesen Werkzeugen verbinden und den Prozess automatisieren.
Das Testen ist in zwei Teile unterteilt: Testframeworks, um Tests zu schreiben und auszuführen, und Werkzeuge mit Hinweisen zur Verbesserung der Codequalität.
Testframeworks
Werkzeuge mit Hinweisen zur Qualität
Die meisten dieser Werkzeuge und Frameworks sind für Java, Python und JavaScript geschrieben, da C++ und C# proprietär sind (obwohl GCC Open Source ist).
Wir haben Testabdeckungswerkzeuge angewendet, und nun sollte die DevOps-Pipeline wie auf dem Bild zu Beginn des Handbuchs aussehen.
Zusätzliche Schritte
Container
Wie bereits erwähnt, kann der Anwendungsserver entweder auf einer virtuellen Maschine oder einem Server bereitgestellt werden, aber Container sind beliebter.
? Вкратце, в виртуальной машине операционная система чаще всего занимает больше места, чем приложение, а контейнеру обычно достаточно нескольких библиотек и конфигурации. В некоторых случаях без виртуальных машин не обойтись, но контейнер вмещает приложение вместе с сервером без лишних затрат.
Für Container werden normalerweise Docker und Kubernetes verwendet, obwohl es auch andere Optionen gibt.
Lesen Sie die Artikel über Docker und Kubernetes auf :
Middleware-Automatisierungswerkzeuge
Unsere DevOps-Kette ist auf die gemeinsame Erstellung und Bereitstellung von Anwendungen ausgerichtet, aber mit DevOps-Tools kann man auch andere interessante Dinge tun. Zum Beispiel lässt sich die Infrastruktur als Code (IaC) nutzen, die auch als Automatisierungstools für Middleware bezeichnet werden. Diese Tools helfen bei der Automatisierung der Installation, Verwaltung und anderen Aufgaben für Middleware. Zum Beispiel kann ein Automatisierungstool Anwendungen (Webanwendungsserver, Datenbank, Überwachungstools) mit den richtigen Konfigurationen abnehmen und sie auf den Anwendungsserver bereitstellen.
Hier sind einige Open-Source-Automatisierungstools für Middleware:

Details in den Artikeln auf :
Und was jetzt?
Das ist nur die Spitze des Eisbergs. Die DevOps-Kette kann viel mehr. Beginnen Sie mit einem CI/CD-Tool und finden Sie heraus, was Sie sonst noch automatisieren können, um Ihre Arbeit zu erleichtern. Vergessen Sie nicht die für eine effektive Zusammenarbeit.
Hier sind noch einige gute Artikel über DevOps für Anfänger:
Außerdem können Sie DevOps mit Open-Source-Tools für Agile integrieren:
Quelle: habr.com
