Best Practices für Entwickler: Die 5 Methoden, die Sie anwenden sollten

Devops ist heute in vielen Technologieunternehmen wichtig, da zwei scheinbar gegensätzliche Missionen und Kulturen zusammenkommen müssen:

  • Agile Entwicklungsteams erfüllen schnell die Geschäftsanforderungen und implementieren Anwendungsänderungen.
  • Betriebsteams arbeiten hart daran, die Systemleistung aufrechtzuerhalten, die Sicherheit der Computerumgebungen zu gewährleisten und die Computerressourcen zu verwalten.

Agile Teams betrachten betriebliche Teams häufig als langsam und starr, während Systemingenieure agile Entwickler als nicht betriebsbereit und rücksichtslos betrachten, wenn Anwendungsbereitstellungen Produktionsprobleme verursachen.

Dies sind Verallgemeinerungen, aber die beiden Disziplinen haben häufig unterschiedliche Motivationen, Begriffe und Werkzeuge - und diese Fehlausrichtung kann zu geschäftlichen Problemen führen. Wenn Startups beispielsweise größer werden, müssen sie Betriebsverfahren entwickeln, um Stabilität zu gewährleisten und gleichzeitig ihre Entwicklungsgeschwindigkeit und Agilität minimal zu beeinträchtigen. Für große Unternehmen müssen sie Wege finden, um kundenorientierte Anwendungen und interne Workflow-Verbesserungen schneller bereitzustellen, ohne die Zuverlässigkeit zu beeinträchtigen oder die Compliance zu beeinträchtigen.

Devops zielt darauf ab, diese Konflikte mit einer Kultur, einer Reihe von Funktionsprinzipien und einer Reihe neuer Best Practices anzugehen, die eine schnelle Bereitstellung von Anwendungen und eine stabile Ausführung mit weniger Konflikten und Kompromissen ermöglichen. Dies wird hauptsächlich durch die Bereitstellung von Methoden erreicht, die Betriebsschritte automatisieren und Konfigurationen standardisieren:

  • Für Entwicklungsteams standardisieren und automatisieren diese Vorgehensweisen die Schritte von der Codeentwicklung bis zum Testen, Sichern und Ausführen von Anwendungen in mehreren Umgebungen.
  • Für den Betrieb fördern die Vorgehensweisen die Automatisierung bei der Konfiguration und Bereitstellung der Infrastruktur, der Überwachung über mehrere Domänen hinweg und ermöglichen eine schnellere Lösung von Produktionsproblemen.

Devops Praktiken umfassen:

  • Versionskontroll- und Verzweigungsstrategien.
  • Pipelines für kontinuierliche Integration und kontinuierliche Lieferung (CI / CD).
  • Container, die Anwendungslaufzeitumgebungen standardisieren und isolieren.
  • Infrastruktur als Code (IAC), mit dem Skripte für die Infrastrukturschicht erstellt werden können.
  • Überwachung der Entwickler-Pipelines und des Zustands laufender Anwendungen.

Devops beginnt mit den Praktiken und Tools, die zum Freigeben von Software zum Berechnen von Umgebungen mit grundlegenden Verfahren verwendet werden, die es seit Jahrzehnten gibt. Dazu gehören die Versionskontrolle zum Verwalten von Codeänderungen in einem Entwicklerteam, das Verzweigen der Codebasis zur Unterstützung verschiedener Entwicklungsaktivitäten sowie Versionskennzeichnungssoftwareversionen, bevor sie in verschiedene Umgebungen übertragen werden.

Der Hauptunterschied für Entwicklerteams besteht darin, dass die Tools einfacher zu verwenden und besser in andere Technologien zu integrieren sind, die das Erstellen und Bereitstellen von Anwendungen automatisieren. Es gibt auch standardisiertere Verzweigungs- und Code-Zusammenführungsstrategien, die mit modernen Versionskontrollsystemen einfacher zu verwalten sind.

Beispielsweise verwenden viele Unternehmen Git (einschließlich GitHub- und BitBucket-Versionen) und andere Versionskontrolltools, die Anwendungen für mehrere Clients, APIs für die Integration und Befehlszeilentools zur Verwaltung häufigerer oder komplexerer Prozeduren bieten. Heutzutage haben die meisten Entwickler in ihren Projekten mindestens eine Versionskontrolltechnologie verwendet, sodass die Implementierung von Standards nicht mehr so ​​schwierig ist wie früher.

Unternehmen, die diese Tools verwenden, können Verzweigungsstrategien wie Gitflow anwenden, die Verzweigungen für Produktion, Test und Entwicklung standardisieren und Verfahren für die Entwicklung neuer Funktionen oder Produktionspatches festlegen. Mit diesen Verzweigungsstrategien können Teams bei verschiedenen Arten von Entwicklungsanforderungen zusammenarbeiten und nur Code einführen, der getestet und in Produktionszweigen implementiert werden kann. Die Teams verwenden dann Versionskennzeichnung, um alle Versionen des Quellcodes und anderer Dateien zu kennzeichnen, die Teil einer Softwareversion sind.

Die meisten Organisationen, die nach Produktionsversionen Benutzerunterstützung benötigen, und andere, die ihre Entwicklungspraktiken frühzeitig entwickeln, folgen häufig den traditionellen Versionsverwaltungspraktiken, die Konstrukte wie Haupt- und Nebenversionen unterstützen. Die anspruchsvolleren Teams, die Anwendungen entwickeln, die weniger Benutzerunterstützung erfordern, können die kontinuierliche Bereitstellung üben, wenn eine Automatisierung vorhanden ist, die kontinuierlich Codeänderungen in Produktionsumgebungen integriert und bereitstellt.

Um häufigere Releases zu ermöglichen, versuchen die Teams, die Schritte vom Einchecken von Code bis zur Bereitstellung vollständig getesteter Anwendungen für Zielcomputerumgebungen zu automatisieren. Continuous Integration (CI) ist die Automatisierung zum Erstellen und Integrieren aller Softwarekomponenten, sodass sie in einem bereitstellbaren Paket enthalten sind. CD-Tools (Continuous Deployment) verwalten umgebungsspezifische Variablen und automatisieren das Weiterleiten von Anwendungen an Entwicklungs-, Test-, Produktions- und andere Computerumgebungen. Zusammen bilden diese Tools die CI / CD-Pipeline.

Damit CI / CD ein effizienter Automatisierungsprozess ist, müssen kontinuierliche Tests in der Pipeline implementiert werden, um sicherzustellen, dass neuer Code keine Fehler und andere Probleme verursacht. In der Pipeline für die kontinuierliche Integration implementierte Komponententests stellen sicher, dass der festgeschriebene Code keine vorhandenen Komponententests beschädigt. Andere Tests, die nach Sicherheitsproblemen auf Codeebene und nach Codestruktur suchen, können ebenfalls im Integrationsschritt implementiert werden. Automatisierte Funktionen und Leistungen, die Laufzeitumgebungen erfordern, werden häufig als Teil von Pipelines für die kontinuierliche Lieferung automatisiert.

Diese Automatisierung führt zu vielen nützlichen Verhaltens- und Übungsänderungen, die es Teams ermöglichen, Änderungen häufiger und sicherer vorzunehmen. Dadurch können Teams häufiger Code einchecken und testen, wodurch Fehler schneller gefunden und behoben werden können. Manuelle Bereitstellungsverfahren sind fehleranfällig, was durch die Automatisierung weitgehend entfällt. Die Automatisierung nimmt auch den größten Teil des Overheads in Anspruch, indem neue Funktionen für Benutzer bereitgestellt werden, sodass Teams häufiger bereitgestellt werden können.

Wenn CI / CD die Automatisierung für die Bereitstellung von Anwendungen bereitstellt, sind Container die Verpackung der Betriebsumgebung der Anwendung. Entwickler können das Betriebssystem, die Anwendungsanforderungen und die Konfigurationsanforderungen als Container zum Ausführen der Anwendungen in einer isolierten Schicht angeben, die das Betriebssystem des Hosts gemeinsam nutzt. Docker und Kubernetes sind Containertechnologien, mit denen Entwickler ihre Anwendungsumgebungen auf konsistente Weise definieren können.

Mit CI / CD-Pipelines zur Integration und Bereitstellung von Code und standardisierten Containern, die die Computeranforderungen jeder Anwendung isolieren, verfügen Entwickler über die Tools, um Anwendungsdienste ohne großen Aufwand herzustellen. Entwicklungsteams haben dann größere Möglichkeiten, Geschäftsanforderungen in Microservices zu übersetzen, die für mehrere Geschäftsanforderungen bereitgestellt, skaliert und genutzt werden können.

Da die Automatisierung der Codeintegration und -bereitstellung sowie die Containerisierung von Anwendungen die Anwendungsbereitstellung vorantreiben, hilft die nächste Entwicklungspraxis bei der Automatisierung und Standardisierung der Infrastruktur und der Cloud-Dienste.

Die Automatisierung und Verwaltung der Infrastruktur war früher schwierig. Sobald eine Architektur ausgewählt wurde, gingen die Betriebsingenieure zu verschiedenen Infrastrukturkomponenten, um sie entsprechend den Anforderungen zu erstellen und zu konfigurieren. Die zur Erfassung dieser Architekturen verwendeten Konfigurations- und Asset-Management-Tools erforderten eine Mischung aus automatisierten und manuellen Schritten und waren häufig veraltet oder es fehlten wichtige Informationen. Computerumgebungen waren ebenfalls starr und obwohl es einige Tools zur Automatisierung von Skalierungsumgebungen gab, waren sie häufig auf einen bestimmten Infrastrukturtyp beschränkt, erforderten unterschiedliche Fähigkeiten zur Implementierung der Automatisierung und hatten nur Zugriff auf eine Teilmenge von Betriebsdaten, um zu bestimmen, ob und wie zu skalieren.

Die heutigen Cloud-Umgebungen bieten Benutzeroberflächen, die den Ingenieuren die Arbeit vereinfachen. Mit diesen Tools können Ingenieure virtuelle private Netzwerke einrichten, Sicherheitsgruppen konfigurieren und dann Rechen-, Speicher- und andere erforderliche Dienste starten.

Aber Entwicklerteams gehen noch einen Schritt weiter. Anstatt die Webschnittstellen zu verwenden und Computerressourcen manuell zu konfigurieren, automatisieren sie den Prozess mit Code. Mit IaC-Tools (Infrastructure as Code) können Betriebsingenieure die Einrichtung und Verwaltung der Infrastruktur skripten und automatisieren. Die Konfigurationen, die das Skalieren von Umgebungen ermöglichen, können auch in diese Skripte eingebettet werden. Chef, Puppet, Ansible und Salt sind vier konkurrierende Technologien, mit denen operative Teams IaC implementieren können.

Ein Herstellungsprozess ist nur so gut wie die Fähigkeit, Probleme zu überwachen, zu alarmieren und zu beheben. Gleiches gilt für die Überwachung von Entwicklern und die Benutzererfahrung beim Ausführen von Anwendungen und Diensten. Da Unternehmen in die Automatisierung, Containerisierung, Standardisierung und Bereitstellung von Anwendungen investieren, ist eine parallele Investition in die Überwachung eine bewährte Methode.

Denken Sie an die Überwachung auf mehreren Ebenen. Auf der untersten Ebene befindet sich die Infrastrukturüberwachung, die die Erkennung und Reaktion ermöglicht, wenn die Rechenressourcen nicht fehlerfrei sind oder eine schlechte Leistung erbringen. Cloud-Umgebungen bieten heute Funktionen zum Überwachen, Warnen und Verwenden elastischer Cloud-Funktionen, um auf Infrastrukturprobleme zu reagieren.

Die nächste Ebene besteht aus den Tools zum Überwachen und Erfassen von Metriken rund um die Automatisierung von Entwicklern. Diese Tools werden mit zunehmender Anzahl von Entwicklern und bereitstellbaren Diensten immer wichtiger. Diese Tools bieten Warnungen bei fehlgeschlagenen Builds und Überwachungstools zur Diagnose von Problemen.

Zuletzt gibt es Tools, die die Verfügbarkeit, Leistung und andere Laufzeitmetriken der Anwendung überwachen. Diese Überwachungstools testen häufig APIs und führen auch vollständige Browsertests für einzelne Endpunkte oder mehrstufige Transaktionen durch. Diese Monitore sind eine Frontline-Verteidigung, um Entwicklerteams zu warnen, wenn APIs oder Anwendungen außerhalb akzeptabler Service-Levels ausgeführt werden.

Es gibt viele Devops-Praktiken, und alle brauchen Zeit, um zu reifen und sich zu integrieren. Es gibt keine vorgeschriebene Reihenfolge für die Implementierung oder genaue Empfehlungen, in wie viel Automatisierung investiert werden soll.

Dennoch sollten Unternehmen zunächst versuchen, die Kultur und Denkweise an den Prinzipien der Entwickler auszurichten und dann zu erkennen, welche Praktiken am besten mit den Geschäftsanforderungen übereinstimmen. Beispielsweise können Unternehmen, die bereits eine schlechte Anwendungsleistung aufweisen, zunächst die Überwachung implementieren, um Probleme schneller zu lösen und die Hauptursachen einfacher zu identifizieren. Andere Organisationen, die Cloud-Migrationen starten, entscheiden sich möglicherweise für die Bereitstellung der Infrastruktur als Code, während diejenigen, die Standardarchitekturen für die Anwendungsentwicklung einrichten, möglicherweise in CI / CD-Pipelines investieren.

Technologen sollten berücksichtigen, dass die Implementierung der Automatisierung mit Kosten verbunden ist und dass nicht jede Organisation eine kontinuierliche Bereitstellung erfordert. Die beste Vorgehensweise besteht darin, sicherzustellen, dass zuerst die Geschäftsanforderungen erfüllt werden, und die Automatisierung der Entwickler auf Bereiche mit hoher Wiederholung auszurichten, in denen manuelle Anstrengungen fehleranfällig sind.

In Verbindung stehendes Video: Der Aufstieg der Entwickler im Unternehmen