Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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

Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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“ (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:

Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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.

Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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.

Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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!

Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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

Anleitung für Anfänger: Erstellen eines DevOps-Pipelines.

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:

weitere Kurse

Nützlich

Quelle: habr.com

60GB SSD 8Gb DDR4