In unserem Shop verwenden wir SVN für die Quellcodeverwaltung und CruiseControl für CI für die Verarbeitung automatischer Builds und Bereitstellungen in unseren Entwicklungs-, Test- und Integrationsumgebungen.
Dies alles funktioniert reibungslos. Aufgrund von Hardware- und Ressourcenbeschränkungen ist unsere Integrationsumgebung jedoch keine Umgebung mit einem Lastausgleich von 2 Servern wie unsere Produktionsumgebung. Während alles andere gleich ist, wäre das der einzige Unterschied zwischen unserer Integrations- und Produktionsumgebung (obwohl ein großer!)
Theoretisch liegt der Unterschied in einer etwas anderen Konfiguration unserer App-Server, und das Bereitstellungsskript müsste lediglich die Build-Artefakte auf zwei Server anstatt nur auf einen ablegen. Warum bin ich jedoch so nervös, unsere Produktionsbereitstellungen zu automatisieren ?!
Ich bin im Allgemeinen kein Kontrollfreak, aber ich habe immer das unersättliche Bedürfnis, die Produktion manuell in die Produktion umzusetzen. Ich habe von Kollegen gehört, dass dies im Allgemeinen eine wirklich schlechte Sache ist, aber sie haben es nicht geschafft, dagegen vorzugehen.
Wenn ich es manuell mache, kann ich SEHEN, dass ich die richtigen Dateien physisch kopiere, die App-Server physisch herunterfahre und sicherstelle, dass sie erfolgreich geschlossen wurden. Ich starte die Server physisch und überprüfe dann die Protokolle, um sie zu erstellen Sicher, es wurde ordnungsgemäß gestartet und die Bereitstellung war erfolgreich. Es gibt mir einen Seelenfrieden.
Was spricht gegen diese ODER-Argumente für die automatische Bereitstellung von Produktionsskripten?
quelle
Antworten:
Es gibt ein paar offensichtliche Argumente dagegen.
Was passiert, wenn du gehst? Sind all diese Informationen sorgfältig dokumentiert oder befinden sie sich größtenteils in Ihrem Kopf? Automatisierte Skripte sind ein viel besserer Ort für jemanden, den jemand anderes übernehmen kann.
Jeder macht Fehler. Es wird eine Zeit kommen, in der die Person, die den Einsatz durchführt, müde ist und überhaupt nicht aufpasst. Ja, im Idealfall werden Bereitstellungen nur an einem ruhigen Ort mit viel Zeit durchgeführt. In der Praxis können sie überstürzt und gestresst sein, wenn sie versuchen, dringende Korrekturen vorzunehmen. Dies ist die wahrscheinlichste und teuerste Zeit, um einen Fehler zu machen. Handelt es sich bei der Bereitstellung um ein einzelnes Skript, ist das Fehlerpotenzial begrenzt.
Zeit. Wenn Bereitstellungen komplizierter werden, steigt der erforderliche Aufwand. Skripte müssen nur gestartet, manuell überprüft und dann manuell umgeschaltet werden (Sie können dies auch automatisieren, aber ich teile einige der Paranoia :).
quelle
Sie können das Beste aus den besten Welten gewinnen: Sorgenfreie Prozessverifizierung und zuverlässige Automatisierung.
Erstellen Sie ein Skript für die Bereitstellung. Überprüfen Sie anschließend manuell, ob Prozesse gestartet, Dateien entfernt usw. wurden. Schreiben Sie also Ihr eigenes QA-Skript, um zu überprüfen, ob die automatisierten Schritte 1 - X tatsächlich ausgeführt wurden.
quelle
Ich denke, der Schlüssel hier ist: Warum denkst du, dass du den Überprüfungsprozess nicht skripten kannst?
Meine Bereitstellungsskripte übertragen nicht nur Archive und starten Dienste neu. Sie drucken bei jedem Schritt der Bereitstellung viele farbcodierte Informationen aus und bieten mir am Ende eine Zusammenfassung der Ereignisse. Es zeigt mir, dass Prozesse aktiv sind, dass die Homepage einen Statuscode von 200 enthält und dass alle Maschinen und Dienste einander gut sehen können. Ich habe dann einen separaten Dienst, der nicht Teil des Skripts ist und der Protokolldateien, Fehler auf 4xx- und 5xx-Ebene sowie wichtige Site-Metriken überwacht. Es schreit mich dann über alle möglichen Medien (E-Mail, SMS und Alarme) an, wenn es drastische Spitzen mit negativen Auswirkungen gibt.
Zwischen diesen und CI-Servern, auf denen Tests ausgeführt werden, wird auf dieser Automatisierungsebene buchstäblich implementiert und vergessen. Ich kann nach einem Push nicht einmal eine einzelne Seite auf der Website durchsuchen, da der Prozess jetzt so zuverlässig ist, dass ich nicht nur so oft wie gewünscht bereitstellen kann, sondern auch ein neuer Entwickler des Projekts eine Aktualisierung der Live-Version vornehmen kann Website innerhalb von Minuten an Bord zu kommen. In der Vergangenheit habe ich sogar die CI-Server nach einer Übergabe an einen Master- / Trunk-Zweig, der alles übergibt, automatisch für die Produktion bereitstellen lassen. So sicher bin ich mit meinen Werkzeugen.
Das solltest du auch sein.
quelle
Führen Sie Ihre Produktionsmaschinen auch mit Remote-Debugging aus und gehen Sie diese manuell durch? Das Erstellen eines richtigen Skripts ist identisch mit dem Schreiben eines Programms. Alle Probleme, die Sie haben, weisen auf Dinge hin, auf die Sie achten und prüfen müssen.
Wenn etwas schief geht, sollte es die richtigen Rollback-Prozeduren durchlaufen und Ihnen eine Nachricht senden. Alles, was passiert, kann für später protokolliert werden. Sie können die Skripte versionieren und Testfälle einrichten.
Wenn Sie jedoch Befehle manuell ausführen, haben Sie keinen dieser Vorteile. Sie haben stattdessen eine Liste von Nachteilen.
Ein richtiges Skript sollte fast identisch sein, wenn Sie alles in die Shell eingegeben haben. Dies ist einer der Gründe, warum wir Bash-Skripte haben. Wenn Sie den Dingen vertrauen, die Sie tun, warum können Sie dann nicht alles aufzeichnen und straffen? Besser prüfen, schneller prüfen, mehr prüfen kann passieren, weil der Computer es tut.
quelle
Ich kann verstehen, dass ich etwas nervös bin, wenn ich etwas Neues in der Produktumgebung probiere. Sein vorsichtig mögliche Katastrophe ist eine gute Sache TM .
Automatisierte Scripting ist auch eine gute Sache TM und so lange , wie Sie es vorsichtig nähern, sollten Sie in der Lage sein , um die Gefahr zu minimieren und Ihre Angst zu senken. Mein Rat lautet also:
Sobald Sie ein paar erfolgreiche Läufe hinter sich haben, wächst Ihr Selbstvertrauen und Sie werden sich bald fragen, wie Sie es jemals geschafft haben, manuelle Bereitstellungen vorzunehmen.
quelle
Hier ist das größte Argument gegen manuelle Bereitstellungen in der Produktion: Sie sind ein Mensch und werden Fehler machen. Es wird zweifellos Zeiten geben, in denen Sie vergessen werden, etwas zu tun, das Ihnen Kummer bereiten wird. Eine gut geschriebene automatisierte Bereitstellung weist nicht dieselbe Tendenz auf. Es ist wahr, dass Sie immer noch fehlerhafte Produktivbereitstellungen haben können, aber das liegt daran, dass Ihre automatisierte Bereitstellung Fehler enthält, die behoben werden müssen.
Nach meiner Erfahrung sind die Vorteile der automatisierten Bereitstellung in der Produktion enorm. Das größte Problem ist, dass Sie an den Wochenenden Spaß haben, anstatt zu versuchen, durch einen manuellen Bereitstellungsprozess zu marschieren, der nicht zusammenarbeitet.
Im Folgenden finden Sie einige wichtige Hinweise zur Automatisierung Ihrer Produktionsbereitstellungen:
quelle
Führen Sie die Skripte auf dem Live-Server aus. Es wird funktionieren, und nachdem Sie ein paar Mal gesehen haben, dass es gut funktioniert, werden Sie vollkommen zuversichtlich sein.
Im Ernst, es ist wahrscheinlicher, dass Sie Fehler machen als das Bereitstellungsskript.
quelle
Computer machen keine Fehler, die Leute machen es.
Schreiben Sie Ihr Skript einmal und überprüfen Sie es gründlich, gehen Sie es Zeile für Zeile durch. Von da an können Sie sicher sein, dass es bei jeder Bereitstellung funktioniert.
Tun Sie es von Hand und Sie sind verpflichtet, Fehler zu machen. Vielleicht hast du geschrieben, was du zu tun hast, aber es ist so einfach, einen Fehler zu machen. Müssen Sie alle Dateien außer der Datei web.config kopieren? Sie können wetten, dass Sie es eines Tages überschreiben werden. Ein Skript wird diesen Fehler niemals machen.
quelle
Die extreme Besorgnis, die Sie bei der Automatisierung von Produktionsbereitstellungen verspüren, beruht höchstwahrscheinlich auf zwei Überzeugungen:
Eines Tages oder des anderen schlägt ein Bereitstellungsschritt fehl und Sie oder ein anderer Mensch können sich schnell von dem Fehler erholen, während ein automatisiertes Skript dies übersehen könnte.
Ein übersehener Produktionsausfall hat dramatische Folgen.
Es gibt wenig, was man gegen 2. tun kann, abgesehen von der Vermeidung von Fehlern. Konzentrieren wir uns also auf 1.
Eine kostengünstige Lösung, die die vorhandene Lösung leicht verbessert, wäre die Verwendung eines halbautomatischen Bereitstellungsverfahrens, das am Ende jedes Installationsschritts auf die Validierung wartet. Mit einer halbautomatischen Lösung profitieren Sie von den Vorteilen einer vollautomatischen Lösung wie Konsistenz und Reproduzierbarkeit, während Sie dennoch die Möglichkeit haben, Fortschritte zu überwachen und Fehler zu beheben, wie Sie es derzeit gewohnt sind.
Das halbautomatische Skript und sein Biotop (Regressionstests usw.) können auch als Grundlage für das gesammelte Wissen über Fehler bei der Installation und Möglichkeiten zur Behebung dienen.
quelle
Was ich mag, ist, dass Sie die Bereitstellung auf Staging oder QS testen können und wissen, dass beim Ausführen auf prod genau dieselben Schritte ausgeführt werden.
Wenn Sie es manuell machen, ist es einfacher, einen Schritt zu vergessen oder sie außer Betrieb zu setzen.
quelle
Angesichts der obigen Ausführungen wäre ich wahrscheinlich genauso besorgt wie Sie.
Ich habe einmal automatisierte Skripts überprüft und getestet, die für SLB bereitgestellt werden, und ich habe das Gefühl, dass ich es vorziehen würde, die Dinge manuell zu erledigen , ohne sie zuvor bei einem Setup mit Lastenausgleich zu testen .
Abgesehen von den prod-ähnlichen Testkonfigurationen hatte eine weitere wichtige Auswirkung darauf, dass die Prod-Bereitstellung von einem anderen Team als den Entwicklern durchgeführt wurde - von Leuten, deren einzige Aufgabe darin bestand, die Produktionsumgebung zu warten.
Nicht, dass sie schneller waren (warum? Ich habe Bereitstellungen 5x-10x häufiger getestet als sie). Der große Unterschied lag im Fokus. Ich meine, mein Kopf wird immer von "Hauptinhalten" belastet - Codierung, Debugging, neue Funktionen - es gibt einfach zu viele Ablenkungen, um mich richtig auf die Bereitstellung zu konzentrieren. Im Gegensatz dazu war ihre Hauptaufgabe nur die Instandhaltung der Produktion und sie waren darauf fokussiert.
Es ist erstaunlich, wie viel besser das Gehirn arbeitet, wenn es fokussiert ist. Diese Jungs, sie waren einfach so viel aufmerksamer, sie haben so viel weniger Fehler gemacht als ich. Sie kannten das Zeug einfach besser als ich. Sie haben mir sogar ein oder zwei Dinge beigebracht, die meine eigenen Testbereitstellungen einfacher machten.
quelle
Erstellen Sie ein Implementierungsskript, mit dem Sie Ihren Code in eine beliebige Umgebung verschieben können. Wir verwenden genau den gleichen Bereitstellungsprozess, um Code nach dev, qa, Staging und schließlich in die Produktion zu verschieben. Da wir mehrmals täglich für Entwickler und täglich für die Qualitätssicherung bereitstellen, haben wir das Vertrauen gewonnen, dass die Bereitstellungsskripten korrekt sind. Testen Sie es einfach, indem Sie es häufig verwenden.
quelle
Der Grund für die Automatisierung ist, dass Sie etwas erhalten, das testfähig und wiederholbar ist und auf das Sie vertrauen können, dass es in jeder erwarteten Situation richtig funktioniert.
Wie bei jeder Änderung in einem beliebigen Kontext müssen Sie immer noch einen Zurücksetzungsplan haben, der auch automatisiert werden sollte.
Sie möchten den Vorgang auch dann beobachten, wenn die Umgebung sehr empfindlich ist, aber niemals manuell, da er einfach nicht reproduziert werden kann.
quelle
Es ist durchaus möglich, Automatisierungsskripts für die Bereitstellung in Produktionsumgebungen zu verwenden. Um dies jedoch zuverlässig zu tun, müssen Sie in der Lage sein, mehrere Dinge zu tun.
Skripte haben einige Vorteile: Sie werden niemals einen Befehl verpassen, weil es 2 Uhr morgens ist und sie müde sind.
Skripte können und werden jedoch weiterhin fehlschlagen. Manchmal liegt der Fehler im Design des Skripts, aber er kann auch durch einen Netzwerk- oder Stromausfall, ein beschädigtes Dateisystem oder Speichermangel verursacht werden.
Aus diesem Grund ist es wichtig, dass nach der Ausführung des Skripts auch eine definierte Testphase befolgt wird, in der überprüft wird, ob die neue Bereitstellung ausgeführt wird und Anforderungen verarbeitet werden, bevor der Live-Datenverkehr aktiviert wird.
quelle
Teilen Sie den Bereitstellungsprozess in zwei Teile. ein. Backup (manuell) - Dies sollte Ihnen Sicherheit geben, wenn während der Bereitstellung etwas schief geht
b. Bereitstellung (automatisiert)
sobald Sie in der Lage sind, mit Vertrauen zum ersten Mal bereitzustellen. Sie können den Sicherungsvorgang auch automatisieren.
quelle