Wie wichtig sind tägliche Builds? [geschlossen]

20

Eines der Kriterien für den Joel-Test sind die täglichen Builds. Die Idee ist, dass, wenn der Build kaputt ist, jeder, der ihn kaputt gemacht hat, in der Nähe ist, um ihn zu reparieren. Wenn der Build nicht repariert werden kann, muss jeder eine alte Version auschecken und daran arbeiten. Ich kann verstehen, wie schlecht dies bei der zentralen Versionskontrolle sein kann, wo es wichtig ist, das Zusammenführen und Verzweigen so weit wie möglich zu vermeiden, aber dies klingt für die verteilte Versionskontrolle nur nach einem kleinen Ärgernis. Stimmst du dem zu? Gibt es andere Gründe, warum tägliche Builds wichtig sind?

Casebash
quelle
2
Joel sollte es aktualisieren, um "Daily Builds und automatisierte Tests" zu sein
Paul
1
Oder besser noch "kontinuierliche Integration mit automatisierten Tests" - manchmal bauen wir nicht an einem Tag, manchmal bauen wir ein Dutzend Mal am Tag. Sobald Maschinen es tun, ist es egal.
Wyatt Barnett
@WyattBarnett Ich stimme vollkommen zu =) Ich habe an einem Projekt gearbeitet, das alle 15 Minuten Code-Builds startete (es sei denn, die Check-in-Aktivität fand statt) und es war großartig.
Patrick Hughes

Antworten:

19

Ich denke, was hier wichtig ist, ist, dass regelmäßige Builds helfen , Fehler eher früher als später zu erkennen . Es muss nicht hat täglich, aber oft genug. Idealerweise kann es auch Ihre Unit-Tests ausführen.

Ziel ist es herauszufinden, wann ein Build vor der letzten Testphase abbricht, um sie so schnell wie möglich zu finden.

Richten Sie es einfach so ein, dass es Ihre Hauptentwicklungsbranche (n) aufbaut.

Wir verwenden es bei der Arbeit (obwohl wir stündlich bauen) und oft, wenn wir vergessen, es einzurichten, stellen wir erst Stunden vor der Veröffentlichung Probleme fest.

mbillard
quelle
2
Täglich bauen UND testen .
Paul
1
@Paul: Nur wenn du es nicht öfter kannst. Dies bei jedem Commit (naja, mit etwas Hysteresezeit) zu tun, ist schön.
Donal Fellows
4

Dazu müssen Sie ein bisschen hinzufügen (und @GoodEnoughs):

Dies klingt jedoch nur nach einem kleinen Ärgernis für die verteilte Versionskontrolle.

Nein, ein "Server" -Build sagt Ihnen, dass Ihr Trunk mehr oder weniger sauber aufgebaut wird und seine Tests bestehen wird (je weniger Konfigurationsaufwand Sie für Ihre Umgebung benötigen).

Ich denke über einen Wechsel zu DVCS nach, aber selbst wenn Sie das getan haben, werden Sie meine kontinuierliche Integration aus meinen kalten, toten Händen ziehen.

Um ein einfaches Beispiel zu nennen: Sie entwickeln Feature "a", er entwickelt Feature "b", verteilt oder nicht, irgendwann müssen Sie alles zusammenfügen - wenn Sie beim Festschreiben vergessen, eine Datei hinzuzufügen, die von der App erstellt wird auf Ihrem Computer, aber es wird nirgendwo anders. Wenn Sie also den Build in Ihren "Trunk" verschieben, wird die kontinuierliche Integration ausgelöst und der Build schlägt fehl, und Sie werden wissen, und bevor jemand Ihren nicht ganz so vollständigen Code abruft, können Sie hoffentlich Schritte unternehmen.

Wenn Sie an einem Projekt mit mehreren Entwicklern arbeiten, müssen Sie in der Lage sein, zu definieren, wo die Release-Versionen herkommen - der eigentliche Trunk -, unabhängig davon, wie Ihre Versionskontrolle funktioniert.

Wenn Sie eine Funktion hinzugefügt haben - insbesondere eine, von der andere abhängig sind -, können Sie sicher sein, dass die Erstellung und das Bestehen von Tests an einem anderen Ort als Ihrer Entwicklungsumgebung gewaltig ist, wenn sie zum "Leben" gedrängt werden. Darüber hinaus setze ich Builds von meinem Buildserver aus ein - so wie man den "endgültigen" Build angibt. Letztendlich werde ich benutzergesteuerte Bereitstellungs-Builds haben. Es ist nicht gut zu sagen, dass Sie es umgehen können - Sie können es nicht, wenn Sie es brauchen (und ich habe in einem Büro Entwicklerboxen durchsucht, um fehlende Dateien zu finden und zu übergeben).

Ist das alles ein bisschen stark? Weiß nicht - aber mein Build-Server ist eines der Dinge, die ich nicht zurückgeben möchte.

Murph
quelle
3

Tägliche Builds sind meiner Meinung nach sehr wichtig. Wenn Sie ein verteiltes Team in verschiedenen Zeitzonen haben, ist es am besten, die Zeit zu ermitteln, die für den größten Teil des Teams ungefähr "Tagesende" ist. Darüber hinaus ist es wünschenswerter, wenn die täglichen Builds über eine automatisierte Testkomponente verfügen.

In den Tagen der zentralen Quellcodeverwaltung befürworte ich kontinuierliche Builds, die alle 5-10 Minuten ausgeführt werden, wenn Änderungen am Quellcode vorgenommen werden. Da ein Kompilierungsfehler das Potenzial hat, den größten Teil des Teams zu verlangsamen. Für Organisationen, die verteilte Quellcodeverwaltungssysteme ausführen, ist möglicherweise kein kontinuierlicher Build erforderlich, da Entwickler weniger häufig direkt auf die ursprüngliche Codebasis zugreifen.

khivi
quelle
1

Idealerweise würden Sie mehr als einmal am Tag bauen, es sei denn, Sie bauen etwas Massives, dessen Bau mehr als einen halben Tag dauert. Sobald Sie einen Continuous-Integration-Server wie Hudson oder TeamCity eingerichtet haben , werden die Builds normalerweise stündlich oder bei jedem Commit automatisch ausgeführt und Sie werden benachrichtigt, wenn Probleme auftreten.

Dies ist eine gute Möglichkeit, Fehler frühzeitig zu erkennen, insbesondere wenn Sie im Rahmen des Builds auch automatisierte Tests ausführen. Es ist besonders nützlich, um Konfigurationsfehler zu finden, bei denen der Build auf dem Computer eines Entwicklers funktioniert, an anderer Stelle jedoch nicht, weil im Repository oder in der Umgebung etwas ausgelassen wurde.

Mit den fortschrittlicheren Servern für die kontinuierliche Integration können Sie auch Metriken im Zeitverlauf verfolgen (z. B. Prozentsatz der Codeabdeckung, Erstellungszeit, Codezeilen usw.).

Dan Dyer
quelle
1

Daily Builds sind in Ordnung. Sie brauchen sie auf jeden Fall, wenn Sie nichts anderes haben, als ehrlich zu sein. Ich denke, Joels Test ist heutzutage ein wenig veraltet.

Meiner Meinung nach sollten Sie den ganzen Tag über kontinuierlich aufbauen, Ihre Testfälle auf Einheits-, System- und Funktionsebene ausführen und idealerweise gleichzeitig in eine bühnenähnliche Umgebung packen und diese bereitstellen, während Sie überprüfen, ob alle Versionsmechanismen für die Datenbank- und Umgebungsversion vorhanden sind arbeiten wie erwartet.

Wenn die Erstellungs- oder Bereitstellungszeiten zu lang sind, sollten Sie erwägen, einige dieser Probleme mit physischen oder Software-RAM-Datenträgern, schnelleren Internetverbindungen, Parallelisierung von Builds usw. zu beheben. Die Zeitersparnis durch schnelles Erkennen von Build-Unterbrechungen wird die Hardwarekosten ziemlich schnell amortisieren .

Keith Brings
quelle
1

Tägliche Builds sind nicht wichtig. Tägliche Builds , die immer erfolgreich sind, sind (oder solche, bei denen es nur eine Stunde lang unterbrochen ist). CI zu haben, wenn der Build 70% der Zeit kaputt ist, ist nicht sehr nützlich, da es Ihnen nicht hilft, einen Fehler zu identifizieren, wenn das Ding größtenteils kaputt ist.

anon
quelle
0

Ich denke, es sollte täglich gebaut, getestet und auf dem Staging-Server bereitgestellt werden.

Die Idee hinter "Daily Build" ist, immer etwas parat zu haben, das von Testern und Projektmanagern ausgeführt werden kann, damit jeder eine Vorstellung vom tatsächlichen Status des Projekts hat.

In der Vergangenheit konnte ein Tester oder Projektmanager bei Desktop-Apps nach dem "täglichen Build" die App sofort ausführen, sodass kein Bereitstellungsschritt erwähnt werden musste.

Sarel Botha
quelle