Dummy-Handbuch: Erstellen von DevOps-Ketten mit Open Source-Tools


Erstellen Sie die erste DevOps-Kette in fünf Schritten für Anfänger.


DevOps ist zu einem Allheilmittel für zu langsame, fragmentierte und andere problematische Entwicklungsprozesse geworden. Sie benötigen jedoch nur minimale Kenntnisse in DevOps. Es werden Konzepte wie die DevOps-Kette und deren Erstellung in fünf Schritten behandelt. Dies ist keine vollständige Anleitung, sondern nur ein „Fisch“, der erweitert werden kann. Beginnen wir mit der Geschichte.


Meine Bekanntschaft mit DevOps


Ich habe bei der Citi Group mit Clouds gearbeitet und die IaaS-Webanwendung entwickelt, um die Cloud-Infrastruktur von Citi zu verwalten. Ich war jedoch immer daran interessiert, wie die Entwicklungskette optimiert und die Kultur unter Entwicklern verbessert werden kann. Greg Lavender, unser technischer Direktor für Cloud-Architektur und -Infrastruktur, hat mich beim Phoenix-Projektbuch beraten. Sie erklärt die Prinzipien von DevOps perfekt, während sie wie ein Roman liest.


Die Tabelle auf der Rückseite zeigt, wie oft Unternehmen neue Versionen herausbringen:



Wie schaffen es Amazon, Google und Netflix, so viel einzuführen? Es ist ganz einfach: Sie haben herausgefunden, wie man eine nahezu perfekte DevOps-Kette erstellt.


Bei Citi war alles völlig falsch, bis wir zu DevOps wechselten. Dann hatte mein Team verschiedene Umgebungen, aber wir haben die Lieferung manuell an den Entwicklungsserver durchgeführt. Alle Entwickler hatten Zugriff auf nur einen Entwicklungsserver, der auf IBM WebSphere Application Server Community Edition basiert. Bei einem gleichzeitigen Zustellungsversuch "stürzte" der Server ab und jedes Mal mussten wir uns "schmerzhaft" einigen. Wir hatten auch eine unzureichende Codeabdeckung mit Tests, einen mühsamen manuellen Lieferprozess und keine Möglichkeit, die Lieferung des Codes gemäß einer Aufgabe oder Kundenanforderung zu verfolgen.


Es war klar, dass dringend etwas getan werden musste, und ich fand einen gleichgesinnten Kollegen. Wir haben beschlossen, die erste DevOps-Kette zusammen zu erstellen - er hat die virtuelle Maschine und den Tomcat-Anwendungsserver eingerichtet, und ich habe Jenkins übernommen, die Integration mit Atlassian Jira und BitBucket und den Code mit Tests abgedeckt. Das Projekt war erfolgreich: Wir haben die Entwicklungskette vollständig automatisiert, eine nahezu 100% ige Verfügbarkeit des Entwicklungsservers erreicht, konnten die Codeabdeckung mit Tests verfolgen und verbessern, und der Git-Zweig konnte mit der Jira-Bereitstellung und -Aufgabe verknüpft werden. Und fast alle Tools, die wir für die DevOps-Kette erstellt haben, waren Open Source.


Tatsächlich wurde die Kette vereinfacht, da wir nicht einmal erweiterte Konfigurationen mit Jenkins oder Ansible verwendet haben. Aber wir haben es geschafft. Vielleicht ist dies eine Folge des Pareto- Prinzips (auch bekannt als 80/20-Regel).


Kurzbeschreibung von DevOps und CI / CD-Kette


DevOps hat unterschiedliche Definitionen. DevOps umfasst wie Agile eine Vielzahl von Disziplinen. Die meisten werden jedoch der folgenden Definition zustimmen: DevOps ist die Methode oder der Lebenszyklus der Softwareentwicklung, deren Hauptprinzip darin besteht, eine Kultur zu schaffen, in der Entwickler und andere Mitarbeiter „auf der gleichen Wellenlänge“ sind, manuelle Arbeit automatisiert wird und jeder das tut, was er am besten kann Die Häufigkeit der Lieferungen steigt, die Produktivität steigt, die Flexibilität steigt.


Und obwohl Tools allein nicht ausreichen, um eine DevOps-Umgebung zu erstellen, können Sie nicht auf sie verzichten. Das wichtigste davon ist die kontinuierliche Integration und kontinuierliche Lieferung (CI / CD). Es gibt verschiedene Phasen in der Kette für jede Umgebung (z. B. DEV (Entwicklung), INT (Integration), TST (Prüfung), QS (Qualitätskontrolle), UAT (Abnahmetest durch Benutzer), STG (Vorbereitung), PROD (Verwendung)). Manuelle Aufgaben werden automatisiert, Entwickler können hochwertigen Code erstellen, bereitstellen und einfach neu erstellen.


In diesem Beitrag wird beschrieben, wie Sie in fünf Schritten eine DevOps-Kette mit Open Source-Tools erstellen (siehe Abbildung unten).



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 unter der MIT-Lizenz geschrieben wurde und mit der Popularisierung der DevOps-Bewegung begann und zum De-facto-Standard für CI \ CD geworden ist.


Was ist Jenkins? Stellen Sie sich vor, Sie haben ein magisches Bedienfeld für eine Vielzahl von Diensten und Tools. Ein CI / CD-Tool selbst wie Jenkins ist nutzlos, wird jedoch mit verschiedenen Tools und Diensten allmächtig.


Neben Jenkins gibt es viele andere offene Tools, wählen Sie eines aus.



So sieht der DevOps-Prozess mit einem CI / CD-Tool aus



Sie haben ein CI / CD-Tool in localhost, aber es gibt nicht viel zu tun. Fahren wir mit dem nächsten Schritt fort.


Schritt 2: Versionskontrolle


Der beste (und vielleicht einfachste) Weg, die Magie des CI / CD-Tools zu testen, besteht darin, es in das SCM-Tool (Source Control Management) zu integrieren. Warum benötigen Sie eine Versionskontrolle? Angenommen, Sie stellen einen Antrag. Sie schreiben es in Java, Python, C ++, Go, Ruby, JavaScript oder in einer anderen Sprache, von der ein Wagen und ein kleiner Wagen. Was Sie schreiben, heißt Quellcode. Insbesondere wenn Sie alleine arbeiten, können Sie zunächst alles in einem lokalen Verzeichnis speichern. Wenn das Projekt jedoch wächst und mehr Personen beitreten, müssen Sie eine Möglichkeit haben, Änderungen im Code freizugeben, aber gleichzeitig Konflikte beim Zusammenführen von Änderungen vermeiden. Außerdem müssen Sie frühere Versionen irgendwie wiederherstellen, ohne Backups zu verwenden und die Copy-Paste-Methode für Dateien mit Code zu verwenden.


Und hier ohne SCM überall. SCM speichert den Code in Repositorys, verwaltet seine Versionen und koordiniert ihn unter den Entwicklern.


Es gibt viele SCM-Tools, aber Git ist zu Recht zum De-facto-Standard geworden. Ich rate Ihnen, es zu verwenden, aber es gibt andere Möglichkeiten.



So sieht die DevOps-Pipeline nach dem Hinzufügen von SCM aus.



Das CI / CD-Tool kann das Laden und Entladen von Quellcode und Teamwork automatisieren. Nicht schlecht? Aber wie kann man dies nun zu einer funktionierenden Anwendung machen, die von Milliarden von Benutzern geliebt wird?


Schritt 3: Automatisierungstool erstellen


Alles läuft wie es sollte. Sie können den Code hochladen und Änderungen im Versionskontrollsystem aufzeichnen sowie Freunde einladen, mit Ihnen zusammenzuarbeiten. Sie haben aber noch keine Bewerbung. Damit dies eine Webanwendung ist, muss sie kompiliert und zur Lieferung in ein Paket gestellt oder als ausführbare Datei ausgeführt werden. (Eine interpretierte Programmiersprache wie JavaScript oder PHP muss nicht kompiliert werden.)


Verwenden Sie ein Montageautomationswerkzeug. Unabhängig davon, für welches Tool Sie sich entscheiden, wird Code im richtigen Format erfasst und die Reinigung, Kompilierung, Prüfung und Lieferung automatisiert. Die Build-Tools unterscheiden sich je nach Sprache. In der Regel werden jedoch die folgenden Open Source-Optionen verwendet.



Großartig! Jetzt fügen wir die Konfigurationsdateien des Assembly Automation Tools in das Versionskontrollsystem ein, damit das CI / CD-Tool sie zusammenstellt.



Es scheint, dass alles in Ordnung ist. Aber wo soll man jetzt alles ausrollen?


Schritt 4: Webanwendungsserver


Sie haben also eine gepackte Datei, die Sie ausführen oder ausrollen können. Damit die Anwendung wirklich nützlich ist, muss sie über einen Dienst oder eine Schnittstelle verfügen, aber Sie müssen alles irgendwo platzieren.


Die Webanwendung kann auf dem Webanwendungsserver gehostet werden. Der Anwendungsserver bietet eine Umgebung, in der Sie Programmlogik aus einem Paket ausführen, das Rendern von Schnittstellen durchführen und Webdienste über einen Socket öffnen können. Sie benötigen einen HTTP-Server und mehrere andere Umgebungen (z. B. virtuelle Maschine), um den Anwendungsserver zu installieren. Stellen wir uns vor, Sie beschäftigen sich vorerst mit all dem (obwohl ich weiter unten auf Container eingehen werde).


Es gibt mehrere offene Webanwendungsserver.



Wir haben bereits fast die DevOps-Arbeitskette erreicht. Ausgezeichnete Arbeit!



Im Prinzip können Sie hier aufhören, dann können Sie es selbst tun, aber es lohnt sich, über die Qualität des Codes zu sprechen.


Schritt 5: Testabdeckung


Das Testen kostet viel Zeit und Mühe, aber es ist besser, Fehler sofort zu finden und den Code zu verbessern, um den Endbenutzern zu gefallen. Zu diesem Zweck gibt es viele offene Tools, die den Code nicht nur testen, sondern auch beraten, wie er verbessert werden kann. Die meisten CI / CD-Tools können eine Verbindung zu diesen Tools herstellen und den Prozess automatisieren.


Das Testen ist in zwei Teile unterteilt: Testen von Frameworks zum Schreiben und Durchführen von Tests sowie Tools mit Tipps zur Verbesserung der Codequalität.


Frameworks testen



Qualitätstipps Werkzeuge



Die meisten dieser Tools und Frameworks sind für Java, Python und JavaScript geschrieben, da C ++ und C # proprietär sind (obwohl GCC Open Source ist).


Wir haben die Testabdeckungstools angewendet, und jetzt sollte die DevOps-Pipeline wie im Bild am Anfang des Handbuchs aussehen.


Zusätzliche Schritte


Container


Wie gesagt, der Anwendungsserver kann auf einer virtuellen Maschine oder einem virtuellen Server gehostet werden, aber Container sind beliebter.


Was sind Container ? Kurz gesagt, in einer virtuellen Maschine nimmt das Betriebssystem meistens mehr Speicherplatz ein als die Anwendung, und einige Bibliotheken und Konfigurationen reichen normalerweise für einen Container aus. In einigen Fällen kann auf virtuelle Maschinen nicht verzichtet werden, aber der Container hält die Anwendung ohne zusätzliche Kosten zusammen mit dem Server.


Für Container werden normalerweise Docker und Kubernetes verwendet, obwohl es andere Optionen gibt.



Lesen Sie Artikel über Docker und Kubernetes auf Opensource.com :



Middleware-Automatisierungstools


Unsere DevOps-Kette konzentriert sich auf das gemeinsame Erstellen und Bereitstellen der Anwendung. Andere interessante Dinge können jedoch mit DevOps-Tools erledigt werden. Verwenden Sie die Infrastruktur beispielsweise als IaC-Tools (Code), die auch als Middleware-Automatisierungstools bezeichnet werden. Diese Tools helfen bei der Automatisierung der Installation, Verwaltung und anderer Aufgaben für Middleware. Ein Automatisierungstool kann beispielsweise Anwendungen (Webanwendungsserver, Datenbank, Überwachungstools) mit den richtigen Konfigurationen aufnehmen und auf den Anwendungsserver übertragen.


Hier sind einige Optionen für Open Middleware-Automatisierungstools:



Details in Artikeln auf Opensource.com :



Und was jetzt?


Dies ist nur die Spitze des Eisbergs. Die DevOps-Kette kann viel mehr. Beginnen Sie mit dem CI / CD-Tool und finden Sie heraus, was Sie sonst noch automatisieren können, um Ihre Arbeit zu erleichtern. Vergessen Sie nicht offene Kommunikationstools für eine effektive Zusammenarbeit.


Hier sind einige weitere gute Artikel über DevOps für Anfänger:



Sie können DevOps auch in offene Tools für Agile integrieren:


Source: https://habr.com/ru/post/de451508/


All Articles