Anfängerhandbuch: Erstellen einer DevOps-Pipeline

Wenn Sie DevOps noch nicht kennen, lesen Sie in diesem Tutorial nach, wie Sie Ihre erste Pipeline mit fünf Schritten erstellen.



Bild




DevOps ist zur Standardlösung für die Behebung langsamer, nicht verbundener oder fehlerhafter Softwareentwicklungsprozesse geworden. Das Problem ist, dass Sie möglicherweise kein Verständnis für diese Techniken haben, wenn Sie DevOps noch nicht kennen und nicht wissen, wo Sie anfangen sollen. Dieser Artikel führt Sie durch die Definition einer DevOps-Pipeline und enthält Anweisungen zum Erstellen in fünf Schritten. Obwohl dieses Tutorial nicht umfassend ist, sollte es Ihnen eine Grundlage geben, um Ihnen den Einstieg zu erleichtern und Ihr Wissen in Zukunft zu erweitern. Aber fangen wir mit der Geschichte an.



Meine DevOps-Reise



Früher arbeitete ich im Cloud-Team der Citi Group und entwickelte eine IaaS-Webanwendung (Infrastructure-as-a-Service) zur Verwaltung der Citi-Cloud-Infrastruktur. Ich habe mich jedoch immer gefragt, wie ich den Entwicklungsprozess effizienter gestalten und dem Entwicklungsteam positive kulturelle Veränderungen bringen kann. Die Antwort fand ich in einem Buch, das von Greg Lavender, CTOs CTO für Cloud-Architektur und -Infrastruktur, empfohlen wurde. Das Buch trägt den Titel The Phoenix Project und erklärt die DevOps-Prinzipien beim Lesen wie ein Roman.



Die Tabelle auf der Rückseite des Buches zeigt, wie oft verschiedene Unternehmen ihre Systeme in einer Release-Umgebung bereitstellen:



Amazon: 23.000 pro Tag

Google: 5.500 pro Tag

Netflix: 500 pro Tag

Facebook: Einmal am Tag

Twitter: 3 Mal pro Woche

Typisches Unternehmen: Einmal alle 9 Monate



Wie sind die Frequenzen von Amazon, Google und Netflix überhaupt möglich? Dies liegt daran, dass diese Unternehmen herausgefunden haben, wie eine nahezu perfekte DevOps-Pipeline erstellt werden kann.



Davon waren wir weit entfernt, bis wir DevOps bei Citi implementiert haben. Mein Team hatte damals verschiedene Umgebungen, aber die Bereitstellung auf dem Entwicklungsserver erfolgte vollständig manuell. Alle Entwickler hatten nur Zugriff auf einen Entwicklungsserver, der auf der IBM WebSphere Application Server Community Edition basiert. Das Problem war, dass der Server immer dann heruntergefahren wurde, wenn mehrere Benutzer gleichzeitig versuchten, ihn bereitzustellen, sodass die Entwickler ihre Absichten miteinander kommunizieren mussten, was ziemlich schmerzhaft war. Darüber hinaus gab es Probleme mit der Abdeckung von Testcode auf niedriger Ebene, umständlichen manuellen Bereitstellungsprozessen und der Unfähigkeit, die Bereitstellung von Code zu verfolgen, der einer bestimmten Aufgabe oder User Story zugeordnet ist.



Ich erkannte, dass ich etwas tun musste und fand einen gleichgesinnten Kollegen. Wir haben uns entschlossen, an der ersten DevOps-Pipeline zusammenzuarbeiten - sie hat eine virtuelle Maschine und einen Tomcat-App-Server eingerichtet, während ich an Jenkins gearbeitet, Atlassian Jira und BitBucket integriert und an der Testcode-Abdeckung gearbeitet habe. Dieses Nebenprojekt war sehr erfolgreich: Wir haben viele Prozesse fast vollständig automatisiert, eine nahezu 100% ige Verfügbarkeit unseres Entwicklungsservers erreicht, Nachverfolgung und verbesserte Testcode-Abdeckung bereitgestellt und die Möglichkeit hinzugefügt, Zweige in Git mit Problemen in Jira oder Bereitstellungen zu verknüpfen. Die meisten Tools, mit denen wir unsere DevOps-Pipeline erstellt haben, waren Open Source.



Jetzt verstehe ich, wie einfach unsere DevOps-Pipeline war: Wir haben keine Erweiterungen wie Jenkins-Dateien oder Ansible verwendet. Diese einfache Pipeline funktionierte jedoch gut, möglicherweise aufgrund des Pareto-Prinzips (auch als 80/20-Regel bekannt).



Eine kurze Einführung in DevOps und die CI / CD-Pipeline



Wenn Sie mehrere Personen fragen: "Was ist DevOps?", Erhalten Sie wahrscheinlich mehrere unterschiedliche Antworten. DevOps hat sich wie Agile zu vielen verschiedenen Disziplinen entwickelt, aber die meisten Menschen werden sich in einigen Punkten einig sein: DevOps ist eine Softwareentwicklungspraxis oder ein Software Development Lifecycle (SDLC), die sich darauf konzentriert, die Kultur zu verändern, in der Entwickler und Entwickler tätig sind Nichtentwickler existieren in einer Umgebung, in der:



automatisierte Vorgänge, die zuvor manuell ausgeführt wurden;

Jeder tut, was er am besten weiß;

Die Anzahl der Implementierungen für einen bestimmten Zeitraum nimmt zu. Der Durchsatz steigt;

Entwicklungsflexibilität wird erhöht.



Die richtigen Softwaretools sind zwar nicht das einzige, was Sie zum Erstellen einer DevOps-Umgebung benötigen, es werden jedoch einige Tools benötigt. Das Schlüsselwerkzeug ist die kontinuierliche Integration und Bereitstellung (CI / CD). In dieser Pipeline haben Umgebungen unterschiedliche Phasen (z. B. DEV, INT, TST, QA, UAT, STG, PROD), viele Vorgänge sind automatisiert und Entwickler können qualitativ hochwertigen Code schreiben, Entwicklungsflexibilität erreichen und eine hohe Bereitstellungshäufigkeit erzielen.



Dieser Artikel beschreibt einen fünfstufigen Ansatz zum Erstellen einer DevOps-Pipeline ähnlich dem im folgenden Diagramm gezeigten mit Open Source-Tools.



Schritt 1: CI / CD-Methoden



Das erste, was Sie benötigen, ist ein CI / CD-Tool. Jenkins, ein Open-Source-Java-basiertes Tool, das unter der MIT-Lizenz veröffentlicht wurde, hat die DevOps-Richtung populär gemacht und wurde zum De-facto-Standard.



Was ist Jenkins? Stellen Sie sich das als eine Art magische Universalfernbedienung vor, mit der verschiedene Dienste und Tools gesprochen und organisiert werden können. Ein CI / CD-Tool wie Jenkins ist für sich genommen nutzlos, wird jedoch leistungsfähiger, wenn es mit verschiedenen Tools und Diensten verbunden wird.



Jenkins ist nur eines von vielen Open-Source-CI / CD-Tools, mit denen Sie Ihre DevOps-Pipeline erstellen können.



Jenkins: Creative Commons und MIT

Travis CI: MIT

CruiseControl: BSD

Buildbot: GPL

Apache Gump: Apache 2.0

Cabie: GNU



So sehen DevOps-Prozesse mit einem CI / CD-Tool aus:



Bild




Auf Ihrem lokalen Host läuft ein CI / CD-Tool, aber Sie können derzeit nicht viel tun. Fahren wir mit der nächsten Etappe der DevOps-Reise fort.



Schritt 2: Verwalten von Versionsverwaltungssystemen



Der beste (und wohl einfachste) Weg, um zu testen, ob Ihr CI / CD-Tool die Magie entfalten kann, ist die Integration in ein Source Code Control Tool (SCM). Warum brauchen Sie Quellcodeverwaltung? Angenommen, Sie entwickeln eine Anwendung. Wann immer Sie eine Anwendung erstellen, die Sie programmieren, spielt es keine Rolle, ob Sie Java, Python, C ++, Go, Ruby, JavaScript oder eine der unzähligen Programmiersprachen verwenden. Der Code, den Sie schreiben, heißt Quellcode. Am Anfang, besonders wenn Sie alleine arbeiten, können Sie wahrscheinlich alles in ein lokales Verzeichnis stellen. Wenn das Projekt jedoch größer wird und Sie andere Personen zur Zusammenarbeit einladen, müssen Sie eine Möglichkeit finden, Konflikte zu vermeiden und Änderungen effizient auszutauschen. Sie benötigen auch eine Möglichkeit, frühere Versionen wiederherzustellen.weil das Erstellen und Kopieren / Einfügen von Backups bereits veraltet ist. Sie (und Ihre Teamkollegen) brauchen etwas Besseres.



Hier wird die Quellcodeverwaltung praktisch zur Notwendigkeit. Dieses Tool speichert Ihren Code in Repositorys, verfolgt Versionen und koordiniert die Arbeit der Projektteilnehmer.



Obwohl es viele Tools zur Quellcodeverwaltung gibt, ist Git zu Recht der Standard. Ich empfehle die Verwendung von Git, obwohl es andere Open Source-Optionen gibt, wenn Sie möchten.



Git: GPLv2 und LGPL v2.1

Subversion: Apache 2.0

Concurrent Versions System (CVS): GNU

Vesta: LGPL

Mercurial: GNU GPL v2 +



So sieht eine DevOps-Pipeline mit hinzugefügten Quellcodeverwaltungen aus.



Bild




Das CI / CD-Tool kann die Prozesse der Überprüfung, Quellcodeerfassung und Zusammenarbeit zwischen Mitgliedern automatisieren. Nicht schlecht? Aber wie macht man es zu einer funktionierenden App, damit Milliarden von Menschen sie nutzen und schätzen können?



Schritt 3: Erstellen Sie ein Build-Automatisierungstool



Fein! Sie können den Code überprüfen und Änderungen am Versionsverwaltungssystem vornehmen sowie Ihre Freunde zur Zusammenarbeit bei der Entwicklung einladen. Sie haben die App jedoch noch nicht erstellt. Um eine Webanwendung zu erstellen, muss sie in einem bereitstellbaren Stapelformat kompiliert und gepackt oder als ausführbare Datei ausgeführt werden. (Beachten Sie, dass eine interpretierte Programmiersprache wie JavaScript oder PHP nicht kompiliert werden muss.)



Verwenden Sie ein Build-Automatisierungstool. Unabhängig davon, für welches Build-Automatisierungstool Sie sich entscheiden, haben alle das gleiche Ziel: Erstellen Sie Quellcode in einem beliebigen Format und automatisieren Sie das Bereinigen, Kompilieren, Testen und Bereitstellen in einer bestimmten Umgebung. Die Build-Tools variieren je nach Programmiersprache. Hier finden Sie jedoch einige gängige Open Source-Optionen.



Name Lizenz Programmiersprache
Maven Apache 2.0 Java
Ameise Apache 2.0 Java
Gradle Apache 2.0 Java
Bazel Apache 2.0 Java
Machen GNU n / a
Grunzen MIT JavaScript
Schluck MIT JavaScript
Buildr Apache Rubin
Rechen MIT Rubin
AAP GNU Python
SCons MIT Python
BitBake GPLv2 Python
Kuchen MIT C #
ASDF Expat (MIT) LISPELN
Kabale BSD Haskell




Toll! Sie können die Konfigurationsdateien des Build-Automatisierungstools in ein Versionsverwaltungssystem einfügen und Ihr CI / CD-Tool alles zusammenführen lassen.



Bild




Es ist okay, nicht wahr? Aber wo soll Ihre Anwendung bereitgestellt werden?



Schritt 4: Server für Webanwendungen



Bisher haben Sie eine komprimierte Datei, die ausführbar oder installierbar sein kann. Damit eine Anwendung wirklich nützlich ist, muss sie eine Art Dienst oder Schnittstelle bereitstellen. Sie benötigen jedoch einen Container, um Ihre Anwendung zu hosten.



Der Webanwendungsserver ist genau ein solcher Container. Der Server bietet eine Umgebung, in der die Logik des bereitgestellten Pakets definiert werden kann. Der Server bietet auch eine Schnittstelle und bietet Webdienste an, indem Sockets nach außen geöffnet werden. Sie benötigen einen HTTP-Server sowie eine Umgebung (wie eine virtuelle Maschine), um ihn zu installieren. Nehmen wir zunächst an, Sie erfahren mehr darüber (obwohl ich unten auf Container eingehen werde).



Es gibt mehrere Open Source-Webanwendungsserver.



Name Lizenz Programmiersprache
Kater Apache 2.0 Java
Steg Apache 2.0 Java
WildFly GNU Lesser Public Java
Glasfische CDDL & GNU weniger öffentlich Java
Django 3-Klausel BSD Python
Tornado Apache 2.0 Python
Gunicorn MIT Python
Python MIT Python
Schienen MIT Rubin
Node.js MIT Javascript




Ihre DevOps-Pipeline ist fast einsatzbereit. Gut gemacht!



Bild




Während Sie dort anhalten und sich integrieren können, ist die Codequalität für einen Anwendungsentwickler eine wichtige Sache, über die er sich Sorgen machen muss.



Schritt 5: Codetestabdeckung



Das Implementieren von Tests kann eine weitere umständliche Anforderung sein. Entwickler müssen jedoch Fehler in der Anwendung frühzeitig erkennen und die Qualität des Codes verbessern, um sicherzustellen, dass die Endbenutzer zufrieden sind. Glücklicherweise gibt es viele Open-Source-Tools, mit denen Sie Ihren Code testen und Empfehlungen zur Verbesserung seiner Qualität abgeben können. Besser noch, die meisten CI / CD-Tools können eine Verbindung zu diesen Tools herstellen und den Prozess automatisieren.



Code-Tests bestehen aus zwei Teilen: Code-Test-Frameworks, mit denen Sie Tests schreiben und ausführen können, und Vorschlagstools, mit denen Sie die Qualität Ihres Codes verbessern können.



Code-Testsysteme



Name Lizenz Programmiersprache
JUnit Eclipse Public License Java
EasyMock Apache Java
Mockito MIT Java
PowerMock Apache 2.0 Java
Pytest MIT Python
Hypothese Mozilla Python
Tox MIT Python




Empfehlungssysteme zur Codeverbesserung



Name Lizenz Programmiersprache
Cobertura GNU Java
CodeCover Eclipse Public (EPL) Java
Coverage.py Apache 2.0 Python
Emma Gemeinsame öffentliche Lizenz Java
JaCoCo Eclipse Public License Java
Hypothese Mozilla Python
Tox MIT Python
Jasmin MIT JavaScript
Karma MIT JavaScript
Mokka MIT JavaScript
Scherz MIT JavaScript




Beachten Sie, dass die meisten der oben genannten Tools und Frameworks für Java, Python und JavaScript geschrieben wurden, da C ++ und C # proprietäre Programmiersprachen sind (obwohl GCC Open Source ist).



Nachdem Sie Tools für die Testabdeckung implementiert haben, sollte Ihre DevOps-Pipeline dem am Anfang dieses Lernprogramms gezeigten Diagramm ähneln.



Zusätzliche Schritte



Container



Wie gesagt, Sie können Ihren Server in einer virtuellen Maschine oder einem virtuellen Server hosten, aber Container sind eine beliebte Lösung.



Was sind Container? Die kurze Erklärung lautet, dass eine virtuelle Maschine eine große Menge an Betriebssystemspeicher benötigt, die die Größe der Anwendung überschreitet, während der Container nur wenige Bibliotheken und Konfigurationen benötigt, um die Anwendung auszuführen. Natürlich gibt es immer noch wichtige Verwendungszwecke für eine virtuelle Maschine, aber ein Container ist eine einfache Lösung zum Hosten einer Anwendung, einschließlich eines Anwendungsservers.



Während andere Containeroptionen existieren, sind Docker und Kubernetes die beliebtesten.



Docker: Apache 2.0

Kubernetes: Apache 2.0 Automation Middleware







Unsere DevOps-Pipeline konzentriert sich hauptsächlich auf die gemeinsame Erstellung und Bereitstellung von Anwendungen, aber es gibt noch viele andere Dinge, die mit DevOps-Tools erledigt werden können. Eine davon ist die Verwendung von IaC-Tools (Infrastructure as Code), die auch als Middleware-Tools bezeichnet werden. Diese Tools helfen bei der Automatisierung der Installation, Verwaltung und anderer Aufgaben für Middleware. Ein Automatisierungstool kann beispielsweise Anwendungen wie den Webanwendungsserver, die Datenbank und das Überwachungstool mit den richtigen Konfigurationen abrufen und auf dem Anwendungsserver bereitstellen.



Hier sind einige Open Source Middleware-Tools:



Ansible: GNU Public

SaltStack: Apache 2.0

Chefkoch: Apache 2.0

Marionette: Apache oder GPL



Bild




Erfahren Sie, wie Sie einen begehrten Beruf von Grund auf neu erlernen oder Ihre Fähigkeiten und Ihr Gehalt verbessern können, indem Sie bezahlte Online-Kurse von SkillFactory absolvieren:





mehr Kurse


Nützlich






All Articles