Wenn Sie neu in DevOps sind, werfen Sie einen Blick auf diese Anleitung zur Erstellung Ihrer ersten Pipeline in fünf Schritten.

DevOps ist zur Standardlösung geworden, um langsame, fragmentierte oder nicht funktionierende Softwareentwicklungsprozesse zu beheben. Das Problem ist, dass Sie, wenn Sie neu in DevOps sind und nicht wissen, wo Sie anfangen sollen, möglicherweise ein Verständnis für diese Methoden vermissen. In diesem Artikel werden wir den DevOps-Pipeline definieren und eine Anleitung zu seiner Erstellung in fünf Schritten anbieten. Obwohl dieses Tutorial nicht allumfassend ist, sollte es Ihnen eine Grundlage bieten, um Ihre Reise zu beginnen und Ihre Kenntnisse in Zukunft zu erweitern. Lassen Sie uns aber mit der Geschichte beginnen.
Meine Reise in die Welt von DevOps
Früher arbeitete ich im Cloud-Team der Citi Group, wo ich eine Infrastructure-as-a-Service (IaaS)-Webanwendung zum Management der Cloud-Infrastruktur von Citi entwickelte. Doch ich interessierte mich immer dafür, wie man den Entwicklungsprozess effizienter gestalten und positive kulturelle Veränderungen im Entwicklerteam einführen kann. Die Antwort fand ich in einem Buch, das mir Greg Lavender, den Chief Technology Officer für Cloud-Architektur und -Infrastruktur bei Citi, empfohlen hat. Das Buch hieß „Projekt Phoenix“ (), und es erklärt die Prinzipien von DevOps, während es sich wie ein Roman liest.
In einer Tabelle auf der Rückseite des Buches wird gezeigt, wie häufig 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 pro Tag
Twitter: Dreimal pro Woche
Typisches Unternehmen: Einmal alle 9 Monate
Wie sind die Häufigkeiten von Amazon, Google und Netflix überhaupt möglich? Das liegt daran, dass diese Unternehmen herausgefunden haben, wie man eine nahezu perfekte DevOps-Pipeline erstellt.
Wir waren weit davon entfernt, bis wir DevOps bei Citi implementierten. Zu dieser Zeit hatte mein Team verschiedene Umgebungen, aber das Deployment auf dem Entwicklungserver war vollständig manuell. Alle Entwickler hatten nur Zugriff auf einen einzigen Entwicklungserver, der auf IBM WebSphere Application Server Community Edition basierte. Das Problem war, dass der Server jedes Mal abstürzte, wenn mehrere Benutzer gleichzeitig versuchten, ein Deployment durchzuführen. Daher mussten die Entwickler sich gegenseitig über ihre Absichten informieren, was ziemlich mühsam war. Darüber hinaus gab es Probleme mit der grundlegenden Testabdeckung des Codes, umständlichen manuellen Deployment-Prozessen und dem Mangel an Möglichkeiten zur Verfolgung von Code-Deployments, die mit bestimmten Aufgaben oder Benutzerhistorien verbunden waren.
Ich erkannte, dass wir handeln mussten, und fand einen gleichgesinnten Kollegen. Wir entschieden uns, gemeinsam einen anfänglichen DevOps-Pipeline zu entwickeln – er richtete die virtuelle Maschine und den Tomcat-Anwendungsserver ein, während ich an Jenkins arbeitete, Atlassian Jira und BitBucket integrierte und an der Testabdeckung des Codes arbeitete. Dieses Nebenprojekt war sehr erfolgreich: Wir automatisierten fast vollständig viele Prozesse, erreichten nahezu 100 % Betriebsbereitschaft unseres Entwicklungsservers, gewährleisteten das Monitoring und verbesserten die Testabdeckung des Codes und fügten die Möglichkeit hinzu, Branches in Git mit Aufgaben in Jira oder Deployments zu verknüpfen. Die meisten der Werkzeuge, die wir für den Aufbau unserer DevOps-Pipeline verwendeten, waren Open-Source.
Jetzt verstehe ich, wie einfach unsere DevOps-Pipeline war: Wir verwendeten keine Erweiterungen wie Jenkins-Files oder Ansible. Dennoch funktionierte diese einfache Pipeline gut, möglicherweise dank des Pareto-Prinzips (auch bekannt als 80/20-Regel).
Kurze Einführung in DevOps und die CI/CD-Pipeline
Wenn Sie mehrere Personen fragen: „Was ist DevOps?“, werden Sie wahrscheinlich verschiedene Antworten erhalten. DevOps, ähnlich wie Agile, hat sich entwickelt, um viele verschiedene Disziplinen abzudecken, aber die meisten Menschen stimmen in einigen Punkten überein: DevOps ist eine Praxis der Softwareentwicklung oder ein Software Development Life Cycle (SDLC), dessen zentraler Grundsatz die Veränderung der Kultur ist, in der Entwickler und Nicht-Entwickler in einer Umgebung existieren, in der:
Die zuvor manuell durchgeführten Operationen automatisiert werden;
Jeder das Beste tut, was er kann;
Die Anzahl der Einsätze über einen bestimmten Zeitraum hinweg steigt; Die Durchsatzmenge vergrößert sich;
Die Flexibilität der Entwicklung steigt.
Obwohl die Verfügbarkeit der richtigen Software-Tools nicht alles ist, was für die Schaffung einer DevOps-Umgebung erforderlich ist, gibt es einige essentielle Tools. Ein Schlüsselinstrument ist Continuous Integration und Continuous Deployment (CI/CD). In diesem Prozess durchläuft die Umgebung verschiedene Phasen (z. B. DEV, INT, TST, QA, UAT, STG, PROD), viele Abläufe sind automatisiert, sodass Entwickler hochwertigen Code schreiben, Flexibilität in der Entwicklung erreichen und eine hohe Bereitstellungshäufigkeit erzielen können.
In diesem Artikel wird ein fünfstufiger Ansatz zur Erstellung eines DevOps-Pipelines beschrieben, ähnlich dem, das in der folgenden Grafik dargestellt ist, unter Verwendung von Open-Source-Tools.
Schritt 1: CI/CD-Methoden
Das erste, was Sie benötigen, ist ein CI/CD-Tool. Jenkins, ein Open-Source-Tool, das auf Java basiert und unter der MIT-Lizenz vertrieben wird, ist das Werkzeug, das den DevOps-Ansatz populär gemacht und sich zum De-facto-Standard entwickelt hat.
Was ist Jenkins? Stellen Sie sich vor, es ist eine Art universelle Fernbedienung, die mit verschiedenen Diensten und Werkzeugen kommunizieren und diese organisieren kann. Ein CI/CD-Tool wie Jenkins ist allein nutzlos, aber es wird mächtiger, je mehr es mit unterschiedlichen Werkzeugen und Diensten verbunden wird.
Jenkins ist nur eines von vielen Open-Source-Tools für CI/CD, das Sie zum Aufbau einer 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:

Sie haben ein CI/CD-Tool, das auf Ihrem localhost läuft, aber im Moment können Sie nicht viel damit machen. Lassen Sie uns den nächsten Schritt in die Welt von DevOps gehen.
Schritt 2: Verwaltung von Versionskontrollsystemen
Die beste (und wahrscheinlich einfachste) Möglichkeit zu überprüfen, ob Ihr CI/CD-Tool wirklich funktioniert, besteht darin, es mit einem Quellcodeverwaltungssystem (SCM) zu integrieren. Warum benötigen Sie Quellcodeverwaltung? Nehmen wir an, Sie entwickeln eine Anwendung. Jedes Mal, wenn Sie eine Anwendung erstellen, programmieren Sie, unabhängig davon, ob Sie Java, Python, C++, Go, Ruby, JavaScript oder einen der vielen anderen Programmiersprachen verwenden. Der Code, den Sie schreiben, wird als Quellcode bezeichnet. Am Anfang, insbesondere wenn Sie alleine arbeiten, können Sie wahrscheinlich alles in einem lokalen Verzeichnis speichern. Aber wenn das Projekt größer wird und Sie andere zur Zusammenarbeit einladen, benötigen Sie eine Möglichkeit, Konflikte zu vermeiden und Ihre Änderungen effektiv auszutauschen. Sie brauchen auch eine Möglichkeit, frühere Versionen wiederherzustellen, denn das Erstellen von Backups und das Kopieren/Einfügen ist bereits überholt. Sie (und Ihre Teamkollegen) brauchen etwas Besseres.
Hier wird das Versionskontrollsystem nahezu unverzichtbar. Dieses Tool speichert Ihren Code in Repositories, verwaltet Versionen und koordiniert die Arbeit der Projektmitglieder.
Obwohl es viele Versionskontrollsysteme gibt, ist Git der Standard, und das zu Recht. Ich empfehle dringend, Git zu verwenden, auch wenn es andere Open-Source-Optionen gibt.
Git: GPLv2 und LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
So sieht ein DevOps-Pipeline aus, ergänzt mit Versionskontrollsystemen.

Ein CI/CD-Tool kann die Prozesse zur Code-Prüfung, zum Abrufen des Quellcodes und zur Zusammenarbeit zwischen Teammitgliedern automatisieren. Gut? Aber wie verwandeln wir das in eine funktionierende Anwendung, die Milliarden von Menschen nutzen und schätzen können?
Schritt 3: Erstellung eines Automatisierungstools für den Build-Prozess
Großartig! Sie können den Code überprüfen und Änderungen im Versionskontrollsystem vornehmen sowie Freunde zur Zusammenarbeit in der Entwicklung einladen. Aber Sie haben noch keine Anwendung erstellt. Um eine Webanwendung zu erstellen, müssen Sie sie kompilieren und in ein bereitstellbares Paketformat verpacken oder als ausführbare Datei starten. (Bitte beachten Sie, dass eine interpretierte Programmiersprache wie JavaScript oder PHP nicht kompiliert werden muss).
Nutzen Sie ein Build-Automatisierungstool. Unabhängig davon, welches Build-Automatisierungstool Sie wählen, verfolgen alle dasselbe Ziel: den Quellcode in ein gewünschtes Format zu kompilieren und die Aufgaben zur Reinigung, Kompilierung, Testung und Bereitstellung in einer bestimmten Umgebung zu automatisieren. Die Build-Tools variieren je nach Ihrer Programmiersprache, hier sind einige gängige Open-Source-Optionen.
Titel
Lizenz
Programmiersprache
Maven
Apache 2.0
Java
Ant
Apache 2.0
Java
Gradle
Apache 2.0
Java
Bazel
Apache 2.0
Java
Make
GNU
N/A
Grunt
MIT
JavaScript
Gulp
MIT
JavaScript
Buildr
Apache
Ruby
Rake
MIT
Ruby
A-A-P
GNU
Python
SCons
MIT
Python
BitBake
GPLv2
Python
Cake
MIT
C#
ASDF
Expat (MIT)
LISP
Cabal
BSD
Haskell
Hallo! Sie können die Konfigurationsdateien Ihres Build-Automatisierungstools in ein Versionsverwaltungssystem hochladen und Ihrem CI/CD-Tool erlauben, alles zusammenzuführen.

Alles gut, oder? Aber wo wollen Sie Ihre Anwendung bereitstellen?
Schritt 4: Web-Anwendungsserver
Bis jetzt haben Sie eine Paketdatei, die ausführbar oder installierbar sein kann. Damit eine Anwendung wirklich nützlich ist, muss sie einen Dienst oder ein Interface bereitstellen, aber Sie benötigen einen Container, um Ihre Anwendung zu hosten.
Ein Web-Anwendungsserver ist genau dieser Container. Der Server bietet eine Umgebung, in der die Logik des bereitgestellten Pakets definiert werden kann. Zudem stellt der Server ein Interface bereit und bietet Webdienste, indem er Sockets für die Außenwelt öffnet. Sie benötigen einen HTTP-Server sowie eine Umgebung (zum Beispiel eine virtuelle Maschine), um ihn zu installieren. Lassen Sie uns vorerst annehmen, dass Sie mehr darüber erfahren werden (obwohl ich im Folgenden über Container sprechen werde).
Es gibt mehrere Open-Source-Web-Anwendungsserver.
Titel
Lizenz
Programmiersprache
Tomcat
Apache 2.0
Java
Jetty
Apache 2.0
Java
WildFly
GNU Lesser Public
Java
GlassFish
CDDL & GNU Lesser Public
Java
Django
3-Klausel BSD
Python
Tornado
Apache 2.0
Python
Gunicorn
MIT
Python
Python
MIT
Python
Rails
MIT
Ruby
Node.js
MIT
Javascript
Ihr DevOps-Pipeline ist fast bereit zur Verwendung. Gute Arbeit!

Obwohl Sie hier aufhören und die Integration selbst übernehmen können, ist die Codequalität ein wichtiger Aspekt für Anwendungsentwickler, um den Sie sich kümmern sollten.
Schritt 5: Code-Testabdeckung
Das Implementieren von Tests kann eine weitere herausfordernde Anforderung sein, doch Entwickler sollten alle Fehler frühzeitig im Anwendungsprozess erkennen und die Codequalität verbessern, um sicherzustellen, dass die Endbenutzer zufrieden sind. Glücklicherweise gibt es zahlreiche Open-Source-Tools, um Ihren Code zu testen und Verbesserungsvorschläge für dessen Qualität zu erhalten. Noch besser ist, dass die meisten CI/CD-Tools sich mit diesen Tools verbinden und den Prozess automatisieren können.
Code-Tests bestehen aus zwei Hauptbereichen: Testframeworks, die beim Schreiben und Ausführen von Tests helfen, sowie Tools, die Verbesserungsvorschläge zur Qualität des Codes liefern.
Code-Testsysteme
Titel
Lizenz
Programmiersprache
JUnit
Eclipse Public License
Java
EasyMock
Apache
Java
Mockito
MIT
Java
PowerMock
Apache 2.0
Java
Pytest
MIT
Python
Hypothesis
Mozilla
Python
Tox
MIT
Python
Empfehlungssysteme zur Codeverbesserung
Titel
Lizenz
Programmiersprache
Cobertura
GNU
Java
CodeCover
Eclipse Public (EPL)
Java
Coverage.py
Apache 2.0
Python
Emma
Common Public License
Java
JaCoCo
Eclipse Public License
Java
Hypothesis
Mozilla
Python
Tox
MIT
Python
Jasmine
MIT
JavaScript
Karma
MIT
JavaScript
Mocha
MIT
JavaScript
Jest
MIT
JavaScript
Bitte beachten Sie, dass die meisten der oben genannten Instrumente und Frameworks für Java, Python und JavaScript entwickelt wurden, da C++ und C# proprietäre Programmiersprachen sind (obwohl GCC Open Source ist).
Jetzt, da Sie die Testabdeckungswerkzeuge implementiert haben, sollte Ihre DevOps-Pipeline der im Einführungsteil dieses Leitfadens gezeigten Grafik ähneln.
Zusätzliche Schritte
Container
Wie bereits erwähnt, können Sie Ihren Server auf einer virtuellen Maschine oder einem Server hosten, aber Container sind eine beliebte Lösung.
Was sind Container? Kurz gesagt, eine virtuelle Maschine benötigt eine große Menge an Betriebssystemressourcen, die den App-Größe übersteigt, während ein Container lediglich einige Bibliotheken und Konfigurationen benötigt, um die Anwendung auszuführen. Offensichtlich haben virtuelle Maschinen immer noch wichtige Anwendungsbereiche, aber Container sind eine leichte Lösung zum Hosten von Anwendungen, einschließlich Anwendungsservern.
Obwohl es auch andere Container-Optionen gibt, sind Docker und Kubernetes die beliebtesten.
Docker: Apache 2.0
Kubernetes: Apache 2.0
Middleware-Tools zur Automatisierung
Unsere DevOps-Pipeline konzentriert sich hauptsächlich auf die gemeinsame Erstellung und Bereitstellung von Anwendungen, aber es gibt viele andere Dinge, die mit DevOps-Tools realisiert werden können. Eine Möglichkeit ist die Nutzung von Tools für Infrastructure as Code (IaC), die auch als Middleware-Automatisierungstools bekannt sind. Diese Tools helfen dabei, die Installation, Verwaltung und andere Aufgaben für Middleware zu automatisieren. So kann ein Automatisierungstool beispielsweise Anwendungen wie Webanwendungsserver, Datenbanken und Monitoring-Tools mit den richtigen Konfigurationen extrahieren und auf einem Anwendungsserver bereitstellen.
Hier sind einige Open-Source-Tools zur Middleware-Automatisierung:
Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache oder GPL

Erfahren Sie, wie Sie eine gefragte Berufsausbildung von Grund auf erhalten oder Ihre Fähigkeiten und Ihr Gehalt durch kostenpflichtige Online-Kurse von SkillFactory verbessern können:
- (12 Monate)
weitere Kurse
- (12 Wochen)
- (12 Monate)
- (9 Monate)
- (9 Monate)
Nützliches
Quelle: habr.com
