Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

Wenn Sie neu bei DevOps sind, werfen Sie einen Blick auf diesen Leitfaden zum Aufbau Ihrer ersten Fünf-Schritte-Pipeline.

Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

DevOps ist zur Standardlösung zur Behebung langsamer, nicht verbundener oder fehlerhafter Softwareentwicklungsprozesse geworden. Das Problem besteht darin, dass Ihnen das Verständnis dieser Techniken möglicherweise fehlt, wenn Sie neu bei DevOps sind und nicht wissen, wo Sie anfangen sollen. Dieser Artikel konzentriert sich auf die Definition einer DevOps-Pipeline und bietet außerdem Anweisungen, wie man sie in fünf Schritten erstellt. Obwohl dieses Tutorial keinen Anspruch auf Vollständigkeit erhebt, soll es Ihnen eine Grundlage für den Einstieg und die Erweiterung Ihres Wissens in der Zukunft bieten. Aber fangen wir mit der Geschichte an.

Meine DevOps-Reise

Ich habe zuvor für das Cloud-Team der Citi Group gearbeitet und eine Infrastructure-as-a-Service (IaaS)-Webanwendung entwickelt, um die Cloud-Infrastruktur von Citi zu verwalten. Ich war jedoch schon immer daran interessiert, den Entwicklungsprozess effizienter zu gestalten und einen positiven kulturellen Wandel herbeizuführen an das Entwicklungsteam. Die Antwort habe ich in einem Buch gefunden, das von Greg Lavender, Citi-CTO für Cloud-Architektur und -Infrastruktur, empfohlen wurde. Das Buch hieß „The Phoenix Project“ (Das Phönix-Projekt) und erklärt DevOps-Prinzipien, während es sich wie ein Roman liest.

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

Amazon: 23 pro Tag
Google: 5 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 sie eine nahezu perfekte DevOps-Pipeline erstellen können.

Wir waren weit davon entfernt, bis wir DevOps bei Citi implementierten. Zu dieser Zeit hatte mein Team unterschiedliche Umgebungen, aber die Bereitstellung auf dem Entwicklungsserver erfolgte vollständig manuell. Alle Entwickler hatten Zugriff auf nur einen Entwicklungsserver basierend auf IBM WebSphere Application Server Community Edition. Das Problem bestand darin, dass der Server heruntergefahren wurde, wenn mehrere Benutzer gleichzeitig eine Bereitstellung versuchten, sodass die Entwickler sich gegenseitig über ihre Absichten informieren mussten, was ziemlich schmerzhaft war. Darüber hinaus gab es Probleme mit der Codetestabdeckung auf niedriger Ebene, umständlichen manuellen Bereitstellungsprozessen und der Unfähigkeit, die Bereitstellung von Code im Zusammenhang mit einer bestimmten Aufgabe oder User Story zu verfolgen.

Mir wurde klar, dass etwas getan werden musste, und ich fand einen gleichgesinnten Kollegen. Wir beschlossen, beim Aufbau der ersten DevOps-Pipeline zusammenzuarbeiten – er richtete eine virtuelle Tomcat-Maschine und einen Anwendungsserver ein, während ich an Jenkins arbeitete, Atlassian Jira und BitBucket integrierte und an der Codetestabdeckung arbeitete. Dieses Nebenprojekt war sehr erfolgreich: Wir haben viele Prozesse fast vollständig automatisiert, eine Betriebszeit von fast 100 % auf unserem Entwicklungsserver erreicht, Tracking und eine verbesserte Codetestabdeckung bereitgestellt und die Möglichkeit hinzugefügt, Zweige in Git mit Vorgängen in Jira oder der Bereitstellung zu verknüpfen. Die meisten Tools, die wir zum Aufbau unserer DevOps-Pipeline verwendeten, 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 dank des Pareto-Prinzips (auch als 80/20-Regel bekannt).

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

Wenn Sie ein paar Leute fragen: „Was ist DevOps?“ werden Sie wahrscheinlich ein paar unterschiedliche Antworten bekommen. DevOps hat sich wie Agile so entwickelt, dass es viele verschiedene Disziplinen umfasst, aber die meisten Menschen sind sich über ein paar Dinge einig: DevOps ist eine Softwareentwicklungspraxis oder ein Software Development Life Cycle (SDLC), dessen zentraler Grundsatz darin besteht, die Kultur zu verändern, in der Entwickler und Nicht-Entwickler arbeiten -Entwickler leben in einer Umgebung, in der:

Automatisierte Vorgänge, die zuvor manuell ausgeführt wurden;
Jeder macht das, was er am besten kann;
Die Anzahl der Implementierungen für einen bestimmten Zeitraum nimmt zu; Erhöhter Durchsatz;
Erhöhte Entwicklungsflexibilität.

Obwohl die richtigen Softwaretools nicht das Einzige sind, was Sie zum Erstellen einer DevOps-Umgebung benötigen, sind einige Tools dennoch unerlässlich. Das wichtigste Werkzeug ist Continuous Integration und Continuous Deployment (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 hochwertigen Code schreiben, Entwicklungsagilität und eine hohe Bereitstellungshäufigkeit erreichen.

In diesem Artikel wird ein fünfstufiger Ansatz zum Aufbau einer DevOps-Pipeline beschrieben, der dem im folgenden Diagramm unter Verwendung von Open-Source-Tools ähnelt.

Schritt 1: CI/CD-Methoden

Als Erstes benötigen Sie ein CI/CD-Tool. Jenkins, ein auf Java basierendes und unter der MIT-Lizenz lizenziertes Open-Source-Tool, ist das Tool, das DevOps populär gemacht und zum De-facto-Standard geworden ist.

Was ist also Jenkins? Betrachten Sie es als eine Art magische Universalfernbedienung, die mit verschiedenen Diensten und Tools kommunizieren und diese organisieren kann. Für sich genommen ist ein CI/CD-Tool wie Jenkins nutzlos, aber es wird leistungsfähiger, wenn es eine Verbindung zu verschiedenen Tools und Diensten herstellt.

Jenkins ist nur eines von vielen Open-Source-CI/CD-Tools, die Sie zum Aufbau Ihrer DevOps-Pipeline verwenden 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:

Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

Auf Ihrem lokalen Host läuft ein CI/CD-Tool, aber Sie können im Moment nicht viel tun. Kommen wir zum nächsten Schritt unserer DevOps-Reise.

Schritt 2: Quellcode-Verwaltungssysteme verwalten

Der beste (und möglicherweise einfachste) Weg, um zu testen, ob Ihr CI/CD-Tool Wunder vollbringen kann, ist die Integration mit einem Quellcodeverwaltungstool (SCM). Warum benötigen Sie eine Quellcodeverwaltung? Nehmen wir an, Sie entwickeln eine Anwendung. Wann immer Sie eine Anwendung erstellen, programmieren Sie, egal, ob Sie Java, Python, C++, Go, Ruby, JavaScript oder eine der unzähligen Programmiersprachen verwenden. Der von Ihnen geschriebene Code wird Quellcode genannt. Am Anfang, insbesondere wenn Sie alleine arbeiten, ist es wahrscheinlich in Ordnung, alles in einem lokalen Verzeichnis abzulegen. Wenn das Projekt jedoch größer wird und Sie andere Personen zur Mitarbeit einladen, benötigen Sie eine Möglichkeit, Konflikte zu vermeiden und gleichzeitig Änderungen effektiv zu teilen. Sie benötigen außerdem eine Möglichkeit, frühere Versionen wiederherzustellen, da das Erstellen von Backups und das Kopieren/Einfügen in diese bereits überholt ist. Sie (und Ihre Teamkollegen) brauchen etwas Besseres.

Hier wird die Quellcodekontrolle fast zu einer 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 der Standard, und das zu Recht. Ich empfehle dringend die Verwendung von Git, obwohl es auch 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 zusätzlichen Quellcodekontrollen aus.

Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

Ein CI/CD-Tool kann die Prozesse der Verifizierung, Quellcode-Erfassung und Zusammenarbeit zwischen Mitgliedern automatisieren. Nicht schlecht? Aber wie macht man daraus eine funktionierende Anwendung, damit Milliarden von Menschen sie nutzen und schätzen können?

Schritt 3: Erstellen Sie ein Build-Automatisierungstool

Großartig! Sie können den Code überprüfen und Änderungen am Quellcodeverwaltungssystem vornehmen sowie Ihre Freunde einladen, an der Entwicklung mitzuwirken. Sie haben jedoch noch keine Anwendung erstellt. Um eine Webanwendung zu erstellen, muss sie in einem bereitstellbaren Paketformat kompiliert und verpackt 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 sie alle das gleiche Ziel: Quellcode in einem gewünschten Format zu erstellen und die Aufgabe des Bereinigens, Kompilierens, Testens und Bereitstellens in einer bestimmten Umgebung zu automatisieren. Die Build-Tools variieren je nach Programmiersprache. Hier sind jedoch einige gängige Open-Source-Optionen.

Name
Lizenz
Programmiersprache

Maven
Apache 2.0
Javac

Ameise
Apache 2.0
Javac

Gradle
Apache 2.0
Javac

Bazel
Apache 2.0
Javac

Marke
GNU
N / A

Grunzen
MIT
JavaScript

Schluck
MIT
JavaScript

Baumeister
Apache
Ruby

Rechen
MIT
Ruby

AAP
GNU
Python

SCons
MIT
Python

Bitbake
GPLv2
Python

Kuchen
MIT
C#

ASDF
Expat (MIT)
LISPELN

Kabale
BSD
Haskell

Großartig! Sie können die Konfigurationsdateien des Build-Automatisierungstools in die Quellcodeverwaltung übernehmen und Ihr CI/CD-Tool alles zusammenfügen lassen.

Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

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

Schritt 4: Webanwendungsserver

Bisher haben Sie eine gepackte Datei, die entweder ausführbar oder installierbar sein kann. Damit eine Anwendung wirklich nützlich ist, muss sie einen Dienst oder eine Schnittstelle bereitstellen. Sie benötigen jedoch einen Container zum Hosten Ihrer Anwendung.

Der Webanwendungsserver ist ein solcher Container. Der Server stellt eine Umgebung bereit, in der die Logik des bereitgestellten Pakets definiert werden kann. Der Server stellt außerdem eine Schnittstelle bereit und bietet Webdienste an, indem er Sockets zur Außenwelt öffnet. Zur Einrichtung benötigen Sie einen HTTP-Server sowie eine Umgebung (z. B. eine virtuelle Maschine). Gehen wir vorerst davon aus, dass Sie mehr darüber erfahren (obwohl ich weiter unten auf Container eingehen werde).

Es gibt mehrere Open-Source-Webanwendungsserver.

Name
Lizenz
Programmiersprache

Kater
Apache 2.0
Javac

Mole
Apache 2.0
Javac

WildFly
GNU Lesser Public
Javac

Glasfische
CDDL und GNU weniger öffentlich
Javac

Django
3-Klausel-BSD
Python

Tornado
Apache 2.0
Python

Gunikorn
MIT
Python

Python
MIT
Python

Schienen
MIT
Ruby

Node.js
MIT
Javascript

Ihre DevOps-Pipeline ist fast einsatzbereit. Gut gemacht!

Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

Sie können hier zwar aufhören und die Integration selbst durchführen, aber die Qualität des Codes ist für einen Anwendungsentwickler ein wichtiger Punkt, um den er sich kümmern muss.

Schritt 5: Code-Testabdeckung

Die Implementierung von Tests kann eine weitere umständliche Anforderung sein, aber Entwickler müssen etwaige Fehler in der Anwendung frühzeitig erkennen und die Codequalität verbessern, um sicherzustellen, dass die Endbenutzer zufrieden sind. Glücklicherweise stehen viele Open-Source-Tools zur Verfügung, mit denen Sie Ihren Code testen und Empfehlungen zur Verbesserung seiner Qualität geben können. Besser noch: Die meisten CI/CD-Tools können in diese Tools integriert werden und den Prozess automatisieren.

Codetests bestehen aus zwei Teilen: Codetest-Frameworks, die Sie beim Schreiben und Ausführen von Tests unterstützen, und Vorschlagstools, die zur Verbesserung der Codequalität beitragen.

Code-Testsysteme

Name
Lizenz
Programmiersprache

JUnit
Öffentliche Eclipse-Lizenz
Javac

Einfacher Spott
Apache
Javac

Mockito
MIT
Javac

PowerMock
Apache 2.0
Javac

Pytest
MIT
Python

Hypothese
Mozilla
Python

tox
MIT
Python

Empfehlungssysteme zur Codeverbesserung

Name
Lizenz
Programmiersprache

Zielgruppe
GNU
Javac

Codecover
Eclipse Public (EPL)
Javac

Abdeckung.py
Apache 2.0
Python

Emma
Gemeinsame öffentliche Lizenz
Javac

JaCoCo
Öffentliche Eclipse-Lizenz
Javac

Hypothese
Mozilla
Python

tox
MIT
Python

Jasmin
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

ist
MIT
JavaScript

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

Nachdem Sie nun Code-Coverage-Tools implementiert haben, sollte Ihre DevOps-Pipeline dem Diagramm am Anfang dieses Tutorials ähneln.

Zusätzliche Schritte

Container

Wie ich bereits sagte, können Sie Ihren Server in einer virtuellen Maschine oder einem Server hosten, Container sind jedoch eine beliebte Lösung.

Was sind Container? Die kurze Erklärung ist, dass eine virtuelle Maschine eine riesige Menge an Betriebssystemspeicher benötigt, mehr als die Größe einer Anwendung, während ein Container nur wenige Bibliotheken und Konfigurationen benötigt, um eine Anwendung auszuführen. Natürlich gibt es immer noch wichtige Verwendungsmöglichkeiten 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

Fortgeschrittene Automatisierungstools

Unsere DevOps-Pipeline konzentriert sich hauptsächlich auf die gemeinsame Erstellung und Bereitstellung von Anwendungen, aber es gibt noch viele andere Dinge, die Sie mit DevOps-Tools tun können. Eines davon ist der Einsatz von Infrastructure as Code (IaC)-Tools, die auch als Middleware-Automatisierungstools bezeichnet werden. Diese Tools helfen bei der Automatisierung der Installation, Verwaltung und anderer Aufgaben für Middleware. So kann ein Automatisierungstool beispielsweise Anwendungen wie einen Webanwendungsserver, eine Datenbank und ein Überwachungstool mit den richtigen Konfigurationen extrahieren und auf einem Anwendungsserver bereitstellen.

Hier sind einige Open-Source-Middleware-Automatisierungstools:

Ansible: GNU Public
SaltStack: Apache 2.0
Chefkoch: Apache 2.0
Puppet: Apache oder GPL

Einsteigerleitfaden: Aufbau einer DevOps-Pipeline

Erfahren Sie Einzelheiten darüber, wie Sie einen begehrten Beruf von Grund auf erlernen oder in Bezug auf Fähigkeiten und Gehalt aufsteigen können, indem Sie kostenpflichtige Online-Kurse von SkillFactory absolvieren:

weitere Kurse

nützlich

Source: habr.com

Kommentar hinzufügen