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 nicht die nötige Einsicht in diese Methoden haben. In diesem Artikel geht es um die Definition einer DevOps-Pipeline und es wird eine Anleitung zur Erstellung in fünf Schritten angeboten. Obwohl dieses Tutorial nicht umfassend ist, sollte es Ihnen eine Grundlage geben, um Ihren Weg zu beginnen und in Zukunft Ihr Wissen zu erweitern. Fangen wir jedoch mit einer Geschichte an.
Meine DevOps-Reise
Früher arbeitete ich im Cloud-Team von Citi Group und entwickelte ein Infrastructure-as-a-Service (IaaS)-Webanwendung zur Verwaltung der Cloud-Infrastruktur von Citi, aber ich interessierte mich immer dafür, wie man den Entwicklungsprozess effektiver gestalten und positive kulturelle Änderungen in das Entwicklerteam bringen kann. Die Antwort fand ich in einem Buch, das von Greg Lavender, dem Chief Technology Officer von Citi für Cloud-Architektur und -Infrastruktur, empfohlen wurde. Das Buch hieß „Das Phoenix-Projekt“ (), und es erklärt die Prinzipien von DevOps, dabei liest es sich wie ein Roman.
In der Tabelle auf der Rückseite des Buches wird gezeigt, 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 pro Tag
Twitter: Dreimal pro Woche
Typisches Unternehmen: Einmal alle 9 Monate
Wie sind die Frequenzen 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. In meinem Team gab es unterschiedliche Umgebungen, aber das Deployment auf dem Entwicklungsserver war vollständig manuell. Alle Entwickler hatten nur Zugriff auf einen einzigen Entwicklungsserver, der auf IBM WebSphere Application Server Community Edition basierte. Das Problem war, dass der Server jedes Mal heruntergefahren wurde, wenn mehrere Benutzer gleichzeitig versuchten, Deployments durchzuführen, sodass die Entwickler sich gegenseitig über ihre Absichten informieren mussten, was ziemlich mühsam war. Zudem gab es Probleme mit der niedrigen Testabdeckung des Codes, den umfangreichen manuellen Deployment-Prozessen und dem Fehlen der Möglichkeit, Code-Deployments, die mit einer bestimmten Aufgabe oder Benutzerstory verbunden waren, nachzuvollziehen.
Ich erkannte, dass wir etwas unternehmen mussten, und fand einen gleichgesinnten Kollegen. Wir beschlossen, zusammenzuarbeiten, um eine erste DevOps-Pipeline zu erstellen – er richtete eine virtuelle Maschine und einen 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, erzielten nahezu 100 % Betriebsbereitschaft unseres Entwicklungsservers, ermöglichten Nachverfolgbarkeit und verbesserten die Testabdeckung des Codes, und fügten die Möglichkeit hinzu, Git-Branches mit Aufgaben in Jira oder Deployments zu verknüpfen. Die meisten Werkzeuge, die wir zur Erstellung 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 aufgrund des Pareto-Prinzips (auch bekannt als 80/20-Regel).
Kurze Einführung in DevOps und 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 der Softwareentwicklungslebenszyklus (SDLC), dessen zentraler Grundsatz der Kulturwandel ist, in dem Entwickler und Nicht-Entwickler in einer Umgebung existieren, in der:
Vorgänge automatisiert sind, die zuvor manuell ausgeführt wurden;
Jeder tut das, was er am besten kann;
Die Anzahl der Implementierungen in einem bestimmten Zeitraum steigt; Die Durchsatzrate erhöht sich;
Die Flexibilität der Entwicklung wird erhöht.
Obwohl die richtigen Softwaretools nicht das einzige sind, was benötigt wird, um eine DevOps-Umgebung zu schaffen, sind einige Werkzeuge unerlässlich. Ein Schlüsselwerkzeug ist die kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD). In diesem Pipeline-Umfeld gibt es verschiedene Phasen (z. B. DEV, INT, TST, QA, UAT, STG, PROD), viele Vorgänge sind automatisiert, und Entwickler können hochwertigen Code schreiben, Flexibilität in der Entwicklung erreichen und hohe Bereitstellungshäufigkeiten erzielen.
In diesem Artikel wird ein fünfstufiger Ansatz zur Erstellung einer DevOps-Pipeline beschrieben, ähnlich der in der folgenden Abbildung, unter Verwendung von Open-Source-Tools.
Schritt 1: CI/CD-Methoden
Das erste, was Sie benötigen, ist ein Tool für CI/CD. Jenkins, ein Open-Source-Tool, das auf Java basiert und unter der MIT-Lizenz verbreitet wird, ist das Mittel, das die Richtung für DevOps populär gemacht hat und zum de-facto Standard wurde.
Was ist also Jenkins? Stellen Sie sich vor, es ist eine Art magische universelle Fernbedienung, die mit verschiedenen Diensten und Werkzeugen kommunizieren und diese organisieren kann. An sich ist ein CI/CD-Tool wie Jenkins nutzlos, aber es wird mächtiger, je mehr es mit verschiedenen Werkzeugen und Dienstleistungen verbunden wird.
Jenkins ist nur eines von vielen Open-Source-Tools für CI/CD, die Sie verwenden können, um eine DevOps-Pipeline zu erstellen.
Jenkins: Creative Commons und MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU
So sehen die DevOps-Prozesse mit dem CI/CD-Werkzeug aus:

Sie haben ein CI/CD-Werkzeug, das auf Ihrem localhost läuft, aber im Moment können Sie damit nicht viel tun. Lassen Sie uns auf die nächste Etappe unserer Reise in die Welt von DevOps übergehen.
Schritt 2: Verwaltung von Versionskontrollsystemen
Der beste (und vielleicht einfachste) Weg, um sicherzustellen, dass Ihr CI/CD-Werkzeug Magie entfalten kann, besteht darin, es mit einem Versionskontrollsystem (SCM) zu integrieren. Warum brauchen Sie eine Versionskontrolle? Angenommen, Sie entwickeln eine Anwendung. Jedes Mal, wenn Sie eine Anwendung erstellen, programmieren Sie, und es spielt keine Rolle, ob Sie Java, Python, C++, Go, Ruby, JavaScript oder eine der unzähligen Programmiersprachen verwenden. Der Code, den Sie schreiben, wird als Quellcode bezeichnet. Zunächst, insbesondere wenn Sie alleine arbeiten, ist es wahrscheinlich möglich, alles in einem lokalen Verzeichnis zu speichern. Aber wenn das Projekt größer wird und Sie andere zur Zusammenarbeit einladen, benötigen Sie eine Möglichkeit, Konflikte bei einem effektiven Austausch von Modifikationen zu vermeiden. Sie brauchen auch eine Möglichkeit, frühere Versionen wiederherzustellen, denn Backups zu erstellen und diese zu kopieren/einzufügen ist inzwischen veraltet. Sie (und Ihre Teamkollegen) benötigen etwas Besseres.
Hier wird das Versionskontrollsystem praktisch unerlässlich. Dieses Werkzeug speichert Ihren Code in Repositories, verwaltet Versionen und koordiniert die Arbeit der Projektteilnehmer.
Obwohl es viele Versionskontrollsysteme gibt, ist Git der Standard, und das hat seine Berechtigung. Ich empfehle ausdrücklich die Verwendung von Git, obwohl es auch andere Open-Source-Alternativen gibt.
Git: GPLv2 und LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
So sieht der DevOps-Pipeline aus, wenn man Versionskontrollsysteme hinzufügt.

Das CI/CD-Werkzeug kann die Prozesse zur Überprüfung, zum Abrufen des Quellcodes und zur Zusammenarbeit zwischen den Mitgliedern automatisieren. Das ist nicht schlecht? Aber wie verwandeln wir das in eine funktionierende Anwendung, die Milliarden von Menschen nutzen und schätzen können?
Schritt 3: Erstellung eines Automatisierungswerkzeugs für den Build
Ausgezeichnet! Sie können den Code überprüfen und Änderungen im Versionskontrollsystem vornehmen sowie Ihre Freunde zur Mitarbeit an der Entwicklung einladen. Aber Sie haben noch keine Anwendung erstellt. Um eine Webanwendung zu erstellen, muss sie kompiliert und in ein bereitstellbares Paketformat verpackt oder als ausführbare Datei gestartet werden. (Beachten Sie, dass interpretierte Programmiersprachen wie JavaScript oder PHP nicht kompiliert werden müssen.)
Nutzen Sie ein Build-Tool. Unabhängig davon, welches Build-Tool Sie wählen, verfolgen sie alle dasselbe Ziel: Den Quellcode in ein gewünschtes Format umzuwandeln und die Aufgaben von Bereinigung, Kompilierung, Testen und Bereitstellung in einer bestimmten Umgebung zu automatisieren. Die Build-Tools variieren je nach Programmiersprache, aber hier sind einige gängige Open-Source-Optionen.
Bezeichnung
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
Toll! Sie können die Konfigurationsdateien des Build-Tools in das Versionskontrollsystem einfügen und Ihrem CI/CD-Tool erlauben, alles zusammenzustellen.

Alles in Ordnung, oder? Aber wo soll Ihre Anwendung bereitgestellt werden?
Schritt 4: Server für Webanwendungen
Bisher haben Sie eine gepackte Datei, die sowohl ausführbar als auch installierbar sein kann. Damit eine Anwendung wirklich nützlich ist, muss sie einen Dienst oder eine Schnittstelle bereitstellen, aber Sie benötigen einen Container, um Ihre Anwendung zu hosten.
Ein Server für Webanwendungen ist genau ein solcher Container. Der Server stellt eine Umgebung bereit, in der die Logik des bereitgestellten Pakets definiert werden kann. Außerdem bietet der Server eine Schnittstelle und stellt Webdienste bereit, indem er Sockets für die Außenwelt öffnet. Sie benötigen einen HTTP-Server sowie eine Umgebung (z. B. eine virtuelle Maschine), um ihn zu installieren. Lassen Sie uns annehmen, dass Sie später mehr darüber erfahren (obwohl ich weiter unten über Container sprechen werde).
Es gibt mehrere Open-Source-Server für Webanwendungen.
Bezeichnung
Lizenz
Programmiersprache
Tomcat
Apache 2.0
Java
Jetty
Apache 2.0
Java
WildFly
GNU Lesser Public
Java
GlassFish
CDDL & GNU Less Public
Java
Django
3-Clause 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 einsatzbereit. Gute Arbeit!

Obwohl Sie hier aufhören und selbst mit der Integration fortfahren können, ist die Codequalität ein wichtiges Anliegen für Anwendungsentwickler, und darauf sollte man achten.
Schritt 5: Testabdeckung
Das Implementieren von Tests kann eine weitere anspruchsvolle Anforderung sein, aber Entwickler sollten alle Fehler in der Anwendung frühzeitig erfassen und die Codequalität verbessern, um sicherzustellen, dass die Endbenutzer zufrieden sind. Glücklicherweise gibt es viele Open-Source-Tools, um Ihren Code zu testen und Empfehlungen zur Verbesserung seiner Qualität zu erstellen. Noch besser ist, dass die meisten CI/CD-Tools mit diesen Programmen verbunden werden können, um den Prozess zu automatisieren.
Das Testen von Code besteht aus zwei Teilen: Testframeworks, die beim Schreiben und Ausführen von Tests helfen, und Tools zur Generierung von Vorschlägen, die helfen, die Codequalität zu verbessern.
Testsysteme
Bezeichnung
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 Verbesserung des Codes
Bezeichnung
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 Tools und Frameworks für Java, Python und JavaScript geschrieben sind, da C++ und C# proprietäre Programmiersprachen sind (obwohl GCC Open-Source ist).
Jetzt, da Sie die Testabdeckungs-Tools implementiert haben, sollte Ihre DevOps-Pipeline wie das Diagramm aussehen, das zu Beginn dieses Leitfadens gezeigt wurde.
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 Betriebssystemspeicher, die den Anwendungsgröße übersteigt, während ein Container nur einige Bibliotheken und Konfigurationen benötigt, um die Anwendung auszuführen. Offensichtlich gibt es immer noch wichtige Anwendungsfälle für virtuelle Maschinen, aber ein Container ist eine leichte Lösung zur Bereitstellung von Anwendungen, einschließlich Anwendungsserver.
Obwohl es auch andere Containeroptionen gibt, sind Docker und Kubernetes am beliebtesten.
Docker: Apache 2.0
Kubernetes: Apache 2.0
Intermediäre Automatisierungswerkzeuge
Unsere DevOps-Pipeline konzentriert sich hauptsächlich auf die gemeinsame Erstellung und Bereitstellung von Anwendungen, aber es gibt viele andere Dinge, die mit DevOps-Werkzeugen gemacht werden können. Eines davon ist die Verwendung von Infrastructure as Code (IaC) Werkzeugen, die auch als intermediäre Automatisierungswerkzeuge bekannt sind. Diese Werkzeuge helfen bei der Automatisierung von Installation, Verwaltung und anderen Aufgaben für Middleware. Beispielsweise kann ein Automatisierungstool Anwendungen wie Webanwendungsserver, Datenbanken und Überwachungswerkzeuge mit den richtigen Konfigurationen extrahieren und auf dem Anwendungsserver bereitstellen.
Hier sind einige Open-Source-Werkzeuge zur intermediären Automatisierung:
Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache oder GPL

Erfahren Sie, wie Sie einen gefragten Beruf von Grund auf neu lernen oder Ihre Fähigkeiten und Ihr Gehalt durch kostenpflichtige Online-Kurse bei SkillFactory verbessern können:
- (12 Monate)
weitere Kurse
- (12 Wochen)
- (12 Monate)
- (9 Monate)
- (9 Monate)
Nützlich
Quelle: habr.com
