Der Artikel wurde von Konstantin Bryukhanov, Leiter des Kurses "CI / CD", vorbereitet . Darin enthüllte Konstantin eine Reihe problematischer Punkte im Zusammenhang mit der Bereitstellung von Softwareproduktcode in IT-Unternehmen und sammelte Empfehlungen unter den besten internationalen Praktiken.
Im IT-Betrieb ist die präzise Anpassung und Bereitstellung einer kontinuierlichen Bereitstellung und Bereitstellung die am meisten nachgefragte Richtung. Technologien und Methoden entwickeln sich ständig weiter, Werkzeuge werden verbessert. Zu den neuesten Bereitstellungs- und Bereitstellungsanforderungen gehören die Bereitschaft und Kontinuität von Änderungstests sowie die Vorbereitung und Einrichtung einer Testumgebung für das QS-Team.
Technologische Durchbrüche und freie Software haben zu einer wesentlichen Änderung des Ansatzes zur Organisation von CI / CD-Prozessen geführt. Der Übergang zu neuen Prinzipien hat die Unternehmenskultur, die nachgefragten Fähigkeiten der Mitarbeiter und die Prinzipien der Arbeit in Organisationen stark beeinflusst, was zu großen Veränderungen in der Welt der Softwareentwicklung geführt hat.
Cloud-Lösungen werden immer wichtiger. Die kontinuierliche Bereitstellung von Software erfordert eine effektive Zusammenarbeit zwischen Entwicklungs-, Test- und Betriebsteams. Die Cloud eignet sich hervorragend für diese Zusammenarbeit.
Die Bereitstellungsphase, die in einer komplexen verteilten Topologie durchgeführt wird, ist jedoch fehleranfällig und erfordert im Allgemeinen eine manuelle Fehlerbehebung. Die Produktbereitstellungsphase eines kontinuierlichen Lieferprozesses führt häufig zu Engpässen und wirkt sich negativ auf die Effektivität des DevOps-Prozesses aus.
Durch die kontinuierliche Bereitstellung können Sie das Testen inkrementeller Softwareänderungen und die schnelle Bereitstellung von Updates auf effizienteste und sicherste Weise automatisieren. Dieser Ansatz gibt Benutzern die Gewissheit, dass die neueste Version des Codes in der Produktionsumgebung verwendet wird, und von Programmierern vorgenommene Änderungen können Kunden in wenigen Stunden oder sogar Minuten erreichen.
Betrachten wir das häufigste Szenario für die Implementierung von CI / CD in einem Projekt:
- Das Entwicklungsteam veröffentlicht eine neue Version des Produkts (neue Funktionen oder Fehlerbehebungen aus der vorherigen Version).
- Der Continuous Integration (CI) -Dienst validiert neuen Code mit einer Reihe von Tests, die mehrere Testebenen umfassen, z. B. Syntax-, Einheiten- und Regressionstests.
- , (CD).
- (, ) , (staging), , .
- stage- CI/CD , .
- .
Dieses Szenario ist das allgemeinste und deckt die meisten Anforderungen der Entwicklungs- und Betriebsteams ab, weist jedoch immer noch einige Probleme auf , zum Beispiel:
- Dateien ersetzen . Oft ist es notwendig, Konfigurationsdateien zu aktualisieren oder zu ersetzen oder statischen Inhalt neu zu generieren. In diesem Fall erhalten Benutzer möglicherweise Fehler, bis der Datenverkehr von der alten auf die neue Softwareversion umgeschaltet wird. Wenn die Bereitstellung fehlschlägt, besteht das Risiko einer Dateikompatibilität.
- . , , . . , - , - .
- . . , , .. . , - , , .. .
Es ist anzumerken, dass die oben aufgeführten Probleme auch in einer nahezu idealen Umgebung auftreten können. Eine der Hauptschwierigkeiten bei der Implementierung der DevOps-Methodik besteht jedoch darin, dass es kein einheitliches Bild davon gibt, wie der kontinuierliche Bereitstellungs- und Produktbereitstellungsprozess aussehen sollte. Viele IT-Unternehmen wissen zu wenig über DevOps, manchmal verstehen sie diese Methodik überhaupt nicht, während andere bereits historische Lösungen haben, auf denen neue Prozesse aufbauen müssen. Angesichts der hohen Anforderungen an die Qualifikation von Devops-Spezialisten und ihres Mangels auf dem Arbeitsmarkt ist der Arbeitgeber häufig gezwungen, die ihm bereits zur Verfügung stehenden Ressourcen zu nutzen und Devops-Aufgaben an unerfahrene Ingenieure zu vergeben. Infolgedessen gibt es noch mehr Schwachstellen im System.
Bei Verwendung von CI / CD ohne korrektes Verständnis der Methodik, ohne einen analytischen Ansatz zum Aufbau der Infrastruktur und der Methoden zur Bereitstellung von Code treten die folgenden Probleme auf:
1. Menschlicher Faktor . Das erste und bedeutendste Risiko hängt mit menschlichen Faktoren zusammen. Stellen Sie sich eine Situation vor, in der Sie mehrere weitere Server konfigurieren müssen, die den vorhandenen ähnlich sind. Wenn der Spezialist, der die vorherigen Installationen oder Einstellungen vorgenommen hat, derzeit aus irgendeinem Grund (krank, beendet usw.) nicht verfügbar ist und keine detaillierten Anweisungen vorbereitet hat, wird die Situation viel komplizierter. In diesem Fall muss jeder neue Spezialist den gesamten Prozess der vollständigen Einrichtung des Servers untersuchen, ohne dass er einen Spielraum für Fehler hat. Außerdem ist es unmöglich, genau abzuschätzen, wie lange es dauern wird, den Erfolg einzurichten und zu garantieren.
Dies schließt auch die Risiken ein, die damit verbunden sind, dass der Autor der Methode einen Fehler gemacht, vergessen hat, die Prozesse mit Tests abzudecken, oder einfach etwas nicht berücksichtigt hat und sein Nachfolger es nicht bemerkt hat.
Es sollte auch beachtet werden, dass Unternehmen häufig mehrere Projekte entwickeln und die IT-Betriebsabteilung normalerweise eines ist und ein Betriebsingenieur mehrere Projekte betreut. Wenn es kein einziges Schema und Konzept gibt, werden die Prozesse in verschiedenen Teams auf unterschiedliche Weise aufgebaut, was die spätere Entwicklung von Devops im Unternehmen erheblich erschwert und einen hohen Schwellenwert für den Eintritt eines Betriebsingenieurs in ein anderes Projekt darstellt, in dem bereits Prozesse verwendet werden, die sich von denen unterscheiden, mit denen er gearbeitet hat vorhin.
2. Nicht idempotente Szenarien... Idempotenz ist ein kritisches Merkmal von Szenarien für die kontinuierliche Bereitstellung und Codebereitstellung, insbesondere bei Infrastrukturbereitstellungen. Der Techniker muss sicher sein, dass bei jeder Ausführung der Skripte das Ergebnis bei der Wiedergabe desselben Skripts eindeutig garantiert, erwartet und unverändert bleibt. Bei der Implementierung von Devops in einem Unternehmen versuchen Ingenieure häufig, eine Geschäftslösung zu entwickeln, und berücksichtigen möglicherweise nicht die Idempotenz oder wissen einfach nichts über diese Anforderung. In diesem Fall erhält das Unternehmen eine Zeitbombe. Es besteht die Möglichkeit, unerwarteten Code an Produktionsanlagen zu liefern. Zum Beispiel, wenn jemand ein CMS-Modul für ein Projekt aktualisiert und dadurch andere beeinflusst hat, wo dies nicht erwartet wird.
3. Speicherung sensibler Daten und Organisation des Zugriffs. Einer der wichtigsten Punkte im Devops-Ansatz zum Speichern geheimer Daten, zum Einschränken von Rechten, zum Organisieren des Netzwerk- und Benutzerzugriffs. Bis jetzt gibt es keine einheitlich akzeptierten Praktiken und Werkzeuge, um dieses Problem zu lösen, und die Ingenieure müssen jedes Mal Nachforschungen anstellen, abhängig von der aktuellen Organisation der Infrastruktur und den angewandten Methoden zur Einschränkung des Zugangs. Aus diesem Grund wird die Implementierung der Devops-Methodik in einem Unternehmen durch die Tatsache erschwert, dass es unmöglich ist, eindeutig eine Lösung für Ihren speziellen Fall zu finden, und die Verwendung der Praktiken anderer Personen nicht immer die Sicherheit garantiert.
4. Definiertes Budgetierungsmodell , besser geeignet für die Wasserfallmethode.
5. Hohe Sicherheitsanforderungen.Folglich ist es unmöglich, die Infrastruktur nationaler IT-Projekte in den Verantwortungsbereich kommerzieller ausländischer Unternehmen wie Amazon oder Microsoft zu stellen.
6. Große Menge an "Legacy-Code", "Legacy-Infrastruktur" , die gewartet werden muss. Die Notwendigkeit der Integration in eine große Anzahl von Legacy-Systemen.
Daher kann der Prozess des Aufbaus von Devops in einem Unternehmen mit einer Reihe von Problemen einhergehen und nicht immer die Probleme lösen, für die es erstellt wurde.
Der erste wichtige Schritt besteht darin , die Beziehung zu Servern als schwer anpassbares, einzigartiges Element der Infrastruktur aufzugeben.Übergang von der manuellen Serverkonfiguration zum automatisierten, zentralisierten Infrastrukturmanagement. Der Prozess zum Einrichten jedes Servers sollte in Form einer Konfiguration beschrieben werden, die leicht zu lesen, änderbar und für die mehrfache sichere Wiederverwendung bereit ist und ein eindeutiges garantiertes Ergebnis liefert. Beispiele für industrielle Orchestratorsysteme sind Chef oder Ansible. Mit diesen Systemen können Sie eine große Anzahl von Servern mit minimalen Kosten verwalten.
Der nächste wichtige Schritt ist die Anwendung automatisierter Testsum die Funktionalität des zu entwickelnden Codes (sowohl Software als auch Infrastruktur) so weit wie möglich abzudecken. Mit anderen Worten, bei einer bereitgestellten Infrastruktur, jedoch ohne automatisierte Tests, besteht der Engpass des Entwicklungsprozesses in der rechtzeitigen Überprüfung der Funktionalität. Die Automatisierung des Testprozesses sollte mit dem eigentlichen Schreiben des Softwarecodes (Komponententest), der Anwendung von Primärtests auf dem Server, der für die Erstellung der Software verantwortlich ist, und einem Test der Serverkonfiguration beginnen. Dies reduziert die Arbeitsbelastung des Software-Qualitätssicherungsteams und verkürzt die Zeit, die Software benötigt, um die Pipeline zu durchlaufen.
Der letzte logische Schritt ist die zentralisierte Erfassung und Analyse von Protokolldateien von allen Servernzur rechtzeitigen Benachrichtigung aller Beteiligten und zur proaktiven Überwachung des Zustands der gesamten Infrastruktur.
Die oben genannten Richtlinien helfen Ihnen beim Aufbau einer stabilen, skalierbaren Infrastruktur, die einen intensiven Entwicklungsprozess bewältigen kann. Die Implementierung von DevOps erfordert die Einbeziehung aller Beteiligten in den Prozess, von Test und Entwicklung bis hin zu Managern und Betrieben. In jeder Phase ist eine ständige retrospektive Analyse des Prozesses erforderlich, da die Systeme aufgrund zufälliger Fehler beim Ändern der Konfiguration vollständig nicht mehr funktionieren. Die Telemetrie muss verbessert werden, um Fehler besser zu erkennen und zu beheben, die Bereitstellungspipeline zu schützen und Managementänderungsziele zu erreichen. Auf diese Weise erhalten Sie maximale Unterstützung von der Führung bei der Umsetzung von DevOps-Initiativen und schaffen ein lebendigeres und freundlicheres Arbeitsumfeld.Damit jeder Teilnehmer während der gesamten Zeit lernen kann - dies hilft nicht nur jedem Darsteller, Ziele zu erreichen, sondern führt die Organisation auch zum Erfolg.
In 3 Monaten auf unserem Online - Kurs „CI / CD“ Sie werden ein Verständnis der Architektur der Cloud - Anbieter entwickeln, lernen , Code - Analyse zu automatisieren und nach Schwachstellen suchen, und lernen , wie die Prozesse der Erstellung, das Testen und die Installation einer Anwendung von den drei größten Anbietern anpassen . Das Programm richtet sich an Spezialisten mit Erfahrung in der Verwaltung. Ein spezieller Eingangstest hilft Ihnen herauszufinden, ob Sie sich ausreichend auf das Training vorbereitet haben.