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:
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.
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.
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!
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
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:
- DevOps Kurs (12 Monate)
mehr Kurse
- Machine Learning (12 )
- Data Science (12 )
- (9 )
- «Python -» (9 )