Wie implementiere ich eine eingefrorene Testumgebung?

8

Hier ist ein Teilzitat aus einer Antwort auf die Frage " Wie vermeide ich durch kontinuierliche Integration verursachte Instabilitäten in Testumgebungen? ":

Diese Umgebung friert normalerweise während der Tests ein.

Meine Frage: Was sind Beispielimplementierungen einer eingefrorenen Umgebung? Dh was können Sie tun, um technisch durchzusetzen, dass niemand (außer wenn dies von einem autorisierten Benutzer wie einem Release Manager erlaubt wird) in einer solchen eingefrorenen Umgebung etwas ändern kann?

Erläuterungen :

  • Ich spreche nicht darüber, was (glaube ich) während der (z. B.) Verarbeitung zum Jahresende in Banken als "eingefrorene Perioden" bezeichnet wird. Dies bedeutet, dass keine Änderungen an Produktionsumgebungen vorgenommen (wiederholt) werden dürfen, um das Risiko zu verringern, dass neue Änderungen / Korrekturen eingeführt werden, die sich auf die Verarbeitung zum Jahresende auswirken können.

  • Angenommen, Benutzer, die Änderungen trotzdem genehmigen / anwenden dürfen (wie der Release-Manager in meinem Beispiel), tun dies nur in Ausnahmefällen. Zum Beispiel, wenn beim Testen ein Problem mit hohem Schweregrad auftritt, bei dem es nicht möglich ist, einen Fix auf eine nächste Version zu verschieben (da die Produktion gefährdet wäre, wenn die Version ohne einen solchen Fix aktiviert würde).

  • Hierbei kann es sich lediglich darum handeln, ein automatisiertes Update während des Tests auszusetzen. Der Punkt ist: Vermeiden Sie, dass eine andere Person eine Anwendung A auf Version Y aktualisiert, während ein anderes Team noch Anwendung B in Version X testet, die auf Anwendung A basiert. Dies kann bedeuten, dass ein Wachmann ein Testteam vermeidet, um eine Aktualisierung einer Abhängigkeit unter zu verlangen Prüfung.

Pierre.Vriens
quelle

Antworten:

3

Meine Antwort im Zusammenhang mit der Frage ist eine sehr teure Testumgebung (wie z. B. Mainframes oder sehr große Telekommunikationsgeräte), die voraussichtlich von mehreren Benutzern für mehrere Tests gemeinsam genutzt wird, sogar gleichzeitig.

In vielen Fällen verfügt ein solches Gerät über ein Software-Management-System, das unter anderem für die Steuerung der (Un-) Installation / Upgrades / Downgrades / etc. Welches einen Mechanismus zum Blockieren solcher Operationen haben sollte (was, wenn ich die Frage richtig verstehe, gleichbedeutend mit dem Einfrieren der Umgebung wäre), basierend auf einigen mehr oder weniger programmierbaren Richtlinien.

In einem solchen Fall könnte eine spezifische Richtlinie genau entwickelt werden, um den gewünschten Einfrierplan zu unterstützen, der für die Testumgebung erforderlich ist. Idealerweise automatisiert, wobei Auslöser zum Einfrieren / Auftauen von externen Quellen akzeptiert werden, bei denen es sich um Testausführungs-Wrapper oder CI-Systeme handeln kann. Und vielleicht mit vom Menschen ausgelösten Überschreibungen, wenn dies als notwendig erachtet wird.

Natürlich wäre eine solche Funktion des Software-Management-Systems hilfreich, wenn andere Komponenten des Geräts getestet werden, aber möglicherweise nicht für Tests des Software-Management-Systems selbst.

Dan Cornilescu
quelle
Diese Antwort bezieht sich genau auf das, was ich gewohnt bin (Mainframes), wo wir solche Dinge bereits seit mindestens 1,5 Jahrzehnten tun (bevor "DevOps" geboren wurde). Ich frage mich, ob es sinnvoll wäre, hier meine eigene Antwort hinzuzufügen (um diese Antwort weiter zu erweitern, wie wir dies mit CMN / ZMF für z. B. "Banken" tun) oder sie einfach auf eine neue (selbst beantwortete) Frage zu übertragen. Was denken Sie?
Pierre.Vriens
Wahrscheinlich wäre eine separate besser - meine ist meistens eine Meinung, da ich eine solche Umgebung nicht direkt erlebt habe, sondern nur ab und zu mit Freunden darüber gesprochen habe.
Dan Cornilescu
4

TeamCity verfügt über eine Build-Funktion für gemeinsam genutzte Ressourcen , mit der Sie eine Ressource definieren können, von der mehrere Build-Definitionen abhängen. Build-Definitionen können entweder eine Lesesperre oder eine Schreibsperre erfordern. Sie können auch definieren, ob diese Sperren exklusiv sind oder einen gewissen Grad an Parallelität zulassen.

Wenn wir die folgenden Annahmen über eine gemeinsam genutzte Umgebung mit dem Namen PreProd treffen :

  • Es gibt eine gemeinsam genutzte Ressource mit dem Namen "PreProd".
  • Alle Build-Definitionen, z. B. Bereitstellungen, die Änderungen an dieser Umgebung vornehmen, verfügen über eine exklusive Schreibsperre für "PreProd".
  • Alle Build - Definitionen, wie nicht-restriktive Tests, die schreibgeschützt auf der Umwelt durchführen nehmen eine nicht-exklusive Lesesperre auf „PreProd“.
  • TeamCity ist der einzige Prozess, der auf PreProd etwas tun kann, wenn auch möglicherweise über ein anderes Tool.

Daher gilt Folgendes:

  • Wenn eine Bereitstellung stattfindet, kann PreProd von nichts anderem verwendet werden. Sie werden in die Warteschlange gestellt.
  • Wenn ein Test ausgeführt wird, wird jede Bereitstellung in die Warteschlange gestellt, bis die Tests abgeschlossen sind.

Sie können einen ähnlichen Mechanismus mit Jenkins verwenden, indem Sie das Ausschluss-Plugin verwenden . Tatsächlich können Sie diese Funktionalität mithilfe von Sperren oder Semaphoren in jeden Prozess integrieren - zum Beispiel Apache ZooKeeper oder HashiCorp Consul .

Richard Slater
quelle
Gute Beschreibung der "Standard" -Implementierungen dessen, was ich in die "Guard" -Idee
gesteckt habe
merci, irgendwelche Links zum Teilen / Hinzufügen zu TeamCity selbst, um mehr darüber zu erfahren?
Pierre.Vriens
1
Absolument, ich habe in der Antwort Hyperlinks zu TeamCity und Jenkins hinzugefügt. Ich kann den TeamCity-Kurs auf Udemy persönlich empfehlen .
Richard Slater
merci für das extra update! PS: Warum nicht auch den Kurslink in Ihre Antwort aufnehmen, zB über eine PS am Ende? Wenn eines Tages ein Moderator vorbeikommt und Kommentare löscht, besteht keine Gefahr, dass er verloren geht (mir passiert das auf einer anderen SE-Site ziemlich oft).
Pierre.Vriens
Ich bin vorsichtig, wenn es darum geht, Links zu kommerziellen Inhalten in Antworten auf SE-Websites im Allgemeinen zu veröffentlichen. Ich möchte hilfreich sein, indem ich diesen Kurs empfehle, da es der einzige Kurs ist, an dem ich teilgenommen habe. Es ist sehr meine eigene Meinung.
Richard Slater
0

Das klingt für mich nach einem Anti-Muster. Ich glaube, jeder oder niemand sollte Zugang zu allen Umgebungen haben.

Wenn Benutzer den Prozess untergraben, würde ich mir den Prozess ernsthaft ansehen, um sicherzustellen, dass er den Menschen nicht im Weg steht.

Die Implementierung eines automatisierten Mechanismus, der einen bestimmten Zustand erzwingt, ist auch nützlich, um Menschen zu ermutigen, die Dinge richtig zu machen. Dies kann über das Konfigurationsmanagement oder die Zerstörung einer unveränderlichen Instanz erfolgen, wenn jemand SSHs dazu bereitstellt

Roboter
quelle
Bitte überprüfen Sie die 2. "Notiz", die ich hinzugefügt habe. Hilft es, wenn Sie Ihren ersten Absatz überdenken? Abgesehen davon verstehe ich nicht, wie der verbleibende Teil Ihrer Antwort tatsächlich den "How to" -Teil meiner Frage beantwortet. Vielleicht gibt es etwas, das ich nicht verstehe. Können Sie mir bitte helfen, Ihre Antwort besser zu verstehen? PS: Keine Sorge, ich stimme selten mit Antworten ab (wenn ich das tue, hinterlasse ich Kommentare ...).
Pierre.Vriens
Sie haben ein xy-Problem meta.stackexchange.com/questions/66377/what-is-the-xy-problem . Ich antworte nicht, wie ich Ihre Lösung implementieren soll. Ich antworte, wie ich Ihr Problem lösen würde
Robo
@Robo Ich bin anderer Meinung, die Frage, wie macht Sinn, ohne Subversion oder was auch immer. Dies könnte lediglich dazu führen, dass ein automatisiertes Update während des Tests ausgesetzt wird. Sie sehen es als manuelle Aktion. Der Punkt ist: Vermeiden Sie, dass jemand anderes eine Anwendung A auf Version Y aktualisiert, während ein anderes Team noch Anwendung B in Version X testet, die auf Anwendung A basiert. Dies bedeutet, dass Sie einen Wachmann haben, um ein Testteam zu vermeiden um ein Update für eine zu testende Abhängigkeit zu benötigen.
Tensibai
Das war aus Ihrer Frage nicht klar. In diesem Fall benötigen Sie eine Art Schloss.
Robo
Bitte beachten Sie, dass ich gerade (die meisten) Kommentare von @Tensibai als zusätzliche Klarstellung integriert habe (letzter Punkt). Hoffe "es" hilft es, meine Frage klarer zu machen. Vielleicht möchten Sie (Robo) auch Ihre Antwort gemäß dieser zusätzlichen Klarstellung überprüfen? PS: merci Tensibai ...
Pierre.Vriens