Kontinuierliche Integration - jedes Mal Debug und Release erstellen?

8

Ist es üblich, beim Einrichten eines Continuous Integration-Servers eine Debug- und Release-Version für jedes Projekt zu erstellen? In den meisten Fällen codieren Entwickler mit aktiviertem Debug-Modus-Projektkonfigurationssatz und es können unterschiedliche Bibliothekspfadkonfigurationen, Compiler-Definitionen oder andere Elemente zwischen Debug / Release unterschiedlich konfiguriert sein, die dazu führen, dass sie sich anders verhalten.

Ich habe meinen CI-Server so konfiguriert, dass sowohl Debug als auch Release für jedes Projekt erstellt werden, und ich frage mich, ob ich es nur überdenke. Ich gehe davon aus, dass ich dies tun werde, solange ich schnelles Feedback erhalten kann. Wenn dies geschieht, schiebe ich das Release möglicherweise auf einen nächtlichen Build. Gibt es einen "Standard" -Ansatz, um dies zu erreichen?

Darian Miller
quelle
programmers.stackexchange.com/questions/55946/… ist eine ähnliche Frage, die es möglicherweise wert ist, diese Antworten zu überprüfen.
JB King
3
Wenn überhaupt, würde ich in die andere Richtung gehen - wenn Sie eine löschen möchten, müssen Sie jedes Mal die Release- Version erstellen, nicht die Debug-Version - da dies die Version ist, die mit größerer Wahrscheinlichkeit beschädigt wird ...
Murph
Ich würde davon ausgehen, dass Release Build der einzige ist, der erstellt wird. Die Frage ist, auch das Debug zu erstellen.
Darian Miller

Antworten:

9

Das Erstellen beider Konfigurationen schadet nicht. Wenn Sie jedoch eine Auswahl treffen müssen (insbesondere aufgrund von Einschränkungen hinsichtlich der Erstellungszeit), erstellen Sie die Release-Konfiguration.

Sie möchten letztendlich die Konfiguration erstellen, testen, verpacken und bereitstellen, die Ihre Kunden verwenden, und Probleme damit finden, bevor sie dies tun.

Bernard
quelle
8

Nur freigeben.

Angenommen, die Entwickler führen ohnehin Debug-Builds durch, und die schlimmsten Fehler sind die, die beim Debuggen funktionieren. Je schneller Sie diese erkennen und die Änderungen eingrenzen können, die sie verursacht haben, desto glücklicher werden alle sein!

Martin Beckett
quelle
Wenn Sie nur eine Komponente haben, ja. Wenn Sie mehrere Komponenten haben, besteht das Risiko, dass für einige Zeit niemand eine bestimmte Komponente ausprobiert und diese kaputt geht, sodass Sie mindestens jede Nacht alles in allen Konfigurationen erstellen müssen.
Jan Hudec
1
@ JanHudec - Was ist der Wert eines Tests eines Debug-Builds? Wenn das Release funktioniert, das Debugging jedoch nicht, ist das ein Fehler oder nur eine Folge des Debuggens?
Martin Beckett
@ MartinBeckett: Es ist ein großes Ärgernis für die nächste Person, die ein echtes Problem in der Debug-Version debuggen muss. Besonders wenn das einige Wochen später ist, was durchaus möglich ist, wenn Sie mehrere Komponenten haben.
Jan Hudec
4

Ich würde dringend empfehlen, beide zu bauen und zu testen, wenn dies in einer Nacht möglich ist.

  • Sie können einige Heisenbugs entdecken
  • Sie stellen sicher, dass Ihr Client das von Ihnen getestete und validierte Verhalten erhält
Simon Bergot
quelle
1

Sie sollten alles bauen, für das die Möglichkeit besteht, dass es für einige Zeit von niemandem ausprobiert wird. Das heißt, wenn Sie nur ein Build-Ziel haben, müssen Sie kein Debugging in kontinuierlicher Integration durchführen, da die Entwickler dies schnell bemerken. Meistens gibt es jedoch mehrere Komponenten, und als Komponenten, an denen derzeit nicht gearbeitet wird, werden sie nicht von Entwicklern erstellt, können aber dennoch durch Änderungen im allgemeinen Code beschädigt werden. In solchen Fällen müssen Sie alle Konfigurationen erstellen, damit der Build nicht beschädigt wird, wenn Sie solche Komponenten berühren müssen.

Das Erstellen aller Elemente in jeder Konfiguration nimmt häufig viel Zeit in Anspruch, sodass Sie nicht nach jedem Commit alles erstellen können. Führen Sie in diesem Fall jedes Mal die Release-Konfigurationen der wichtigsten Komponenten durch und fügen Sie jeden Abend einen Build von allem hinzu.

Ich arbeite derzeit an einem Projekt, bei dem wir einen kontinuierlichen Build haben, bei dem die Versionskontrolle alle 10 Minuten abgefragt wird und obwohl es sich nur um ausgewählte Konfigurationen handelt, kann dies nach größeren Commits noch mehr als 1 Stunde dauern. Dann haben wir einen nächtlichen Build, der alle Komponenten in allen Konfigurationen erstellt und immer einen sauberen Build ausführt, der ungefähr 5 Stunden dauert. Und dann haben wir einen wöchentlichen Build, der Releases in allen angepassten Varianten erstellt und mehr als den ganzen Tag dauert.

Jan Hudec
quelle
0

Das hängt von Ihrem Projekt ab. In meinem aktuellen Projekt erstellen wir nur bei jedem Commit ein Debug (und führen Unit-Tests durch), während wir die Release-Version als Teil des "Deployment-Builds" erstellen.

Bei der letzten Firma, bei der ich gearbeitet habe, gab es einige Probleme mit der Release-Version, die etwas anders funktionierten. Daher haben wir bei jedem Commit Debug und Release erstellt und Unit-Tests für beide ausgeführt.

Dror Helfer
quelle
4
und wenn Sie feststellen, dass die Version kurz vor der Bereitstellung defekt ist, haben Sie zwei Stunden Zeit, um die Situation zu lösen
Simon Bergot