Eine der in Jez Humbles Continuous Delivery beschriebenen Vorgehensweisen ist, dass Sie ein Paket erstellen und es dann für jede Umgebung freigeben, in der Sie es bereitstellen, damit die Bereitstellung und die Artefakte selbst mehrmals getestet wurden, bevor Sie in die Produktion gehen.
Ich unterstütze diese Idee voll und ganz.
Auf der anderen Seite sind Debug-Modus-Builds, mit denen Sie Stack-Traces mit Zeilennummern erstellen können, in Testumgebungen unglaublich nützlich, ebenso wie die Möglichkeit zum Remote-Debuggen. Sie möchten jedoch einen Release-Build an die Produktion senden.
Also, für Leute, die dem ersten Prinzip folgen, zu welchem Zeitpunkt wechseln Sie von Debug- zu Release-Builds?
Ist es vor der ersten Bereitstellung in einer Testumgebung sinnvoll, die Kosten für den Verlust des Debug-Modus zu ermitteln, um sicherzustellen, dass Sie den tatsächlichen Release-Kandidaten frühzeitig testen? Oder erstellen Sie irgendwann im Promotion-Prozess erneut und gehen davon aus, dass Sie dem Build-Prozess über die Software vertrauen werden? Oder schrauben Sie einfach alles und stellen Debug-Versionen für die Produktion bereit?
Hinweis: Ich weiß, dass dies für interpretierte Sprachen nicht wirklich gilt, da Sie den Schalter normalerweise in der Konfiguration betätigen können, anstatt dies zum Zeitpunkt der Erstellung zu tun.
Antworten:
Wir wechseln früh, wenn der Quellcode eine Versionsnummer hat und in die Debian-Build-Warteschlange gestellt wird. Wir sind jedoch in der glücklichen Lage, wissenschaftliche Software mit gut spezifizierten Ein- und Ausgängen und geringer Systeminteraktion zu entwickeln, sodass die Kosten für die Reproduktion einer Fehlersituation recht gering sind.
Dies ist auch meine allgemeine Antwort: Der Punkt des Buildwechsels hängt hauptsächlich von den Reproduktionskosten für Fehler ab. Wenn diese sehr hoch sind, würde ich sogar Debugbuilds versenden, um Kunden zu testen. Dies birgt zwar das Risiko von Buildfehlern für den Produktionsbuild, ist jedoch möglicherweise immer noch billiger, als Wochen mit der Testfallreproduktion zu verbringen.
quelle
Sobald wir zur Qualitätssicherung gehen, wechseln wir zur Veröffentlichung von Builds. Aber wann immer wir ein Release Build erstellen, erstellt unser Build-Prozess auch eine Debug-Version der DLLs. Auf diese Weise können wir die Debug-DLLs schnell in die QA-Umgebung übertragen und bei Bedarf zusätzliche Informationen abrufen.
Sowohl die Release- als auch die Debug-Version der DLLs werden über mehrere Jahre gesichert und aufbewahrt.
quelle
In unserer Umgebung wird der Code an vielen Standorten bereitgestellt. Daher sollte auf jede Bereitstellungsinstanz ein anderer Kontext angewendet werden. Normalerweise setzen wir es an einem "weniger riskanten" Ort ein und sehen die Erfahrung.
Diese Bereitstellung befindet sich noch in der Produktion, daher handelt es sich nicht um den Debug-Modus. Es wird jedoch auch vorausgesetzt, dass die Tests gut durchgeführt werden.
Wenn der Debug-Modus deaktiviert ist, kann ein schnelles Debuggen des Codes (vor Ort) schwierig sein. Wenn die Freigabe fehlgeschlagen ist, wird die Produktion zurückgesetzt, um auf die Freigabe zurückzugreifen.
Wir versuchen jedoch, eine identische Umgebung beizubehalten oder zu erstellen, die eine solche Umgebung reproduzieren und erneut testen kann. (Ich weiß, das ist nicht immer trivial), aber manchmal müssen wir nur die Transaktionen / Eingaben reproduzieren.
Der Punkt ist, wie sehr die Versuchung, Debug-Modus-Release sollte nicht in der Produktion sein. Ich werde jedoch nicht sagen, dass dies eine Regel ist.
Eine andere Sache ist, dass die Version immer noch als Testversion bezeichnet wird, bis sie eingerichtet wurde (indem sie eine beträchtliche Zeit läuft), dass andere Räumlichkeiten sie noch nicht akzeptieren.
Es gibt noch einige andere Methoden, um sicherzustellen, dass der Erstellungsprozess selbst nicht ganz fehlerhaft ist. Siehe hierzu: Eine einfache Möglichkeit, die Release-Qualität in einer RAD-Umgebung zu verbessern
quelle
Wir haben unsere Entwicklermaschinen eingerichtet, um Debugbuilds zu erstellen. Sobald der devs-Commit-Code vorliegt, wird in unserer Continuous-Integration-Umgebung (TeamCity) ein Bereitstellungspaket erstellt, das für die Veröffentlichung erstellt wird. Wenn wir uns für eine Bereitstellung auf einem QA-Computer entscheiden, nehmen wir das neueste Bereitstellungspaket vom CI-Server und übertragen es, sodass es immer freigegeben wird, es sei denn, es befindet sich auf einem Entwicklungscomputer.
Übrigens können Sie für einige Sprachen auch bei der Erstellung für die Veröffentlichung noch Debugsymbole erstellen. In .NET gibt es zum Beispiel eine "Nur-PDB" -Einstellung, die Optimierungen ermöglicht, aber dennoch Debug-Dateien erstellt. Offensichtlich ist das Debuggen gegen eine Release-Version schwieriger, da es nicht Zeile für Zeile äquivalent ist, aber dennoch hilfreich sein kann.
quelle