2009-01-06 22 views
14

Lesen this Post hat mich wundernd verlassen; sind nächtliche Builds immer besser für eine Situation als kontinuierliche Integration? Der Konsens der Antworten scheint ziemlich einseitig zugunsten der kontinuierlichen Integration zu sein, ist das Evangelisation oder gibt es wirklich keinen Grund, nächtliche Builds zu verwenden, wenn kontinuierliche Integration eine Option ist?Kontinuierliche Integration vs Nächtliche Builds

+0

Basierend auf den Antworten entwickelte sich die Frage zu "Nightly Builds zusätzlich zur Continuous Integration?" –

Antwort

17

Wenn Sie wirklich eine kontinuierliche Integration mit allen verfügbaren Tests durchführen, wären nächtliche Builds überflüssig, da das letzte, das an diesem Tag überprüft wurde, bereits getestet wurde. Wenn Ihr CI-System nur die Ausführung einer Teilmenge aller verfügbaren Tests beinhaltet, zum Beispiel weil einige Ihrer Tests lange dauern, können Sie zusätzlich Nachttische verwenden, um alle Tests durchzuführen. Auf diese Weise können Sie viele Fehler frühzeitig erkennen, und wenn Sie sie nicht rechtzeitig abfangen können, können Sie sie zumindest über Nacht fangen.

Ich weiß zwar nicht, ob das technisch immer noch CI ist, da man jedes Mal nur einen "partiellen" Build macht, indem man einige der Tests ignoriert.

+1

Die Anwendung könnte externe Abhängigkeiten haben, die möglicherweise unterbrochen werden, und es kann nützlich sein, zu wissen, wann das passiert ist. Es gibt auch zeitaufwändige Aufgaben wie Code-Analyse oder Leistungstests, die mit Versionskontrolle on-demand ausgeführt werden könnten, aber das könnte eine Weile dauern. Wenn Entwicklung ist täglich, dann kann der CI-Server die meisten dieser, aber manchmal Entwicklungsstopps für eine Weile aufgrund Urlaub, andere Projekte, Verhandlungen usw. –

+0

Für größere Entwicklungen kann die "nächtliche Build" auch einen größeren Umfang der haben 'CI bauen'. Typischerweise erstellt das CI nur eine Entwicklungslinie ("Zweig"), oft auf einem lokalen PC. Wo wie jede Nacht alle Variationen gebaut werden. ZB alle Feature-Zweige, für viele Plattformen und/oder Produkte und/oder Konfigurationen. Typischerweise in einer kontrollierteren Build-Umgebung. – Albert

5

Ja, wenn Sie einen Prozess haben, der an einen Build angehängt werden soll, aber er ist ressourcenintensiv. Zum Beispiel führen wir in meinem Team JTest während des nächtlichen Builds aus. Wir können es nicht während des Tages laufen, weil:

  1. Es hat eine Menge von Ressourcen erfordert, die nicht
  2. Es dauert 4 Stunden zur Verfügung steht jedes Mal
+0

Könnten Sie in diesem Fall fortlaufend Builds erstellen und JTest während eines geplanten nächtlichen Builds ausführen? – brian

+0

Genau das machen wir. – Elie

3

In meiner beruflichen Meinung zu vervollständigen Der einzige Grund, nächtliche Builds zu verwenden, ist, wenn der Build-Prozess so lange dauert, dass er nicht in einer "angemessenen" Zeit fertiggestellt werden kann.

Zum Beispiel, wenn Ihr Build-Prozess 5 Stunden dauert es abgeschlossen ist wirklich keinen Grund, in einen Build auf Prüfung zu tun.

Darüber hinaus gibt so viel Wert ist, so bald wie möglich zu wissen, wann ein Build scheitert, dass es andere Bedenken außer Kraft setzt.

+1

"Angemessen" bedeutet nicht unbedingt viele Stunden. Es bedeutet nicht schnell genug, um es zwischen Checkins zuverlässig zu machen. Wenn es in der Regel fünf oder sechs Checkins pro Tag gibt, ist etwas über zwei Stunden eindeutig zu viel für CI. –

+0

@david: Ich stimme zu. – NotMe

10

In unserer Organisation haben nächtliche Builds und CI-Builds zwei unterschiedliche Zwecke. Der CI-Build ist ein Build für den neuesten Code, bei dem die Komponententests wie erwartet beim letzten Einchecken ausgeführt werden. Wir führen auch mehrere Code-Metriken für den CI-Build aus.

Für nächtliche Builds verwenden wir jedoch nur Quellcode, der den Peer-Review-Prozess durchlaufen hat und als testbereit gilt.

Auf diese Weise enthält der nächtliche Build immer Build, der zum Testen "funktionsbereit" ist, während der CI-Build Funktionen enthält, die zwar funktionsfähig sind (soweit die Unit-Tests bestehen), aber nicht bereit sein können Testgruppe.

Die Testgruppen schreiben neue CRs ausschließlich aus einem der nächtlichen Builds im Gegensatz zum CI-Build, obwohl diese auch für informelle explorative Typprüfungen verfügbar sind.

+0

Ich mag diesen Prozess – Tim

+3

Wie unterscheiden Sie zwischen dem funktionsfähigen Code und dem aktiv entwickelten Code? Sind diese beiden Zweige im Repository und der cl-Code wird mit dem "Feature-Ready" -Zweig zusammengeführt, wenn er "Feature-Ready" wird? – brian

+2

Ich mag das auch; aber ich denke du solltest die VCS Seite klären, wie du diese Trennung von "Feature Ready" erreichst. –

2

Es hängt vom Zweck und der Länge jedes Ihrer Builds ab. Im Grunde sollten Sie herausfinden, was Sie von CI lernen möchten, und entscheiden, ob es sich lohnt, die Ressourcen für die Ausführung mehrerer Builds auszugeben.

Wir haben bei meinem letzten Job eine kontinuierliche Integration für verschiedene Zwecke verwendet.

Zuerst haben wir es verwendet, um sicherzustellen, dass das Repository und damit die Entwickler immer eine Version des kompilierten Codes hatten. Wenige Dinge sind schlechter für Teammitglieder, als die gebrochenen Änderungen einer anderen Person durch Kommentieren, Auskommentieren, Umkehren und Zusammenführen zu verwalten, weil eine Person schlechten Code eingecheckt hat. Dafür hatten wir einen Build, der sofort ohne Tests oder andere Validierung lief, so dass wir so schnell wie möglich wussten, ob der Code sicher zu aktualisieren war. Der Aufbau dauerte in der Regel etwa zehn Minuten und die Maschine lief wahrscheinlich an einem normalen Arbeitstag um 50%. Hier wurde keine Dokumentation generiert, nur ein leiser Pass oder eine laute Fehlersirene.

Zweitens wollten wir so schnell wie möglich wissen, ob irgendwelche Regeln gebrochen wurden oder nicht. Je schneller Sie eine gebrochene Regel finden, desto einfacher ist es zu beheben. Zu diesem Zweck hatten wir eine separate Maschine, die einen vollständigen Build und eine Validierung des Codes durchführte. Diese Maschine lief an einem normalen Arbeitstag kontinuierlich 12-14 Stunden am Tag. Der E-Mail-Status des Builds wurde gesendet und beschreibt defekte Komponententests, Code-Compliance usw.

Wir hielten dort an, soweit es automatisch ausgelöste Builds gibt. Ein nächtlicher Build darauf erschien uns ein bisschen extrem. Aber ich denke, wenn Sie möchten, dass eine Snapshot-Erstellung täglich archiviert wird, möchten Sie vielleicht einen dritten Build mit den zusätzlichen erforderlichen Schritten planen. Wir hatten jedoch einen anderen Build, der unsere QA-Implementierungsartefakte für eine schnelle und einfache Bereitstellung umfasste und archivierte, aber wir haben diese nur manuell ausgelöst.

3

Wenn Sie einen schönen, robusten CI-Prozess haben, ist ein "nächtliches" Programm immer noch nützlich.

  1. Wie bereits erwähnt, kann ein "nächtlicher" Build umfangreiche Tests und vielleicht einige Systemtests auf hohem Niveau durchführen. End-to-End-Zeug.
  2. Das Konzept eines "nächtlichen" Builds kann von jedem in der Organisation leicht verstanden werden. Wenn Sie Schwierigkeiten haben, CI-Builds an andere Gruppen weiterzuleiten (z. B. eine QA-Gruppe, die nicht dieselbe Handhabe für Agile wie die Dev-Gruppe hat), ist ein "nächtliches" Konzept ein mächtiges und einfaches Konzept.
  3. Wenn Ihre Nacht ein separater Satz von Ressourcen ist, kann sie separat verwaltet und verwendet werden, um "goldene" Bilder mit einigen Ansprüchen an die Softwareintegrität zu schneiden. Zum Beispiel schreibt der Entwickler Code, ein vertrauenswürdiges Build-System, das der Entwickler nicht anfassen kann, erstellt es, QA testet den Gold Build und signiert es. In einer solchen Situation funktioniert der nächtliche Build wie ein Produktions-Build-System.

Nur ein paar Gedanken.

2

Ich denke, die anderen Beiträge decken die allgemeinen Gründe, wie einen Build-Prozess, der "zu lange" dauert oder nur eine Teilmenge der Tests während der CI-Build ausführen müssen. Aber es gibt einen anderen Grund, der politisch ist.

In einigen Organisationen werden die offiziellen Builds von einem minimal reagierenden Build/Infrastruktur/Release Management/SCM-Team gehandhabt. In diesen Fällen könnten Sie sie für den nächtlichen Build verantwortlich machen und dann den CI-Build aus der Entwicklung heraus ausführen. Dies verhindert einen Kampf, weil ihr Build "der offizielle Build" bleibt und Ihr CI-Build gibt Ihnen das Feedback, das Sie brauchen.

2

Wir haben sowohl kontinuierliche Integration als auch nächtliche Builds an Ort und Stelle. Sie dienen zwei verschiedenen Zwecken.

Unser kontinuierlicher Integrationsmechanismus erstellt die Software und führt Komponententests unter der fortlaufenden Integrationssuite durch.

Unsere nächtlichen Build-Tags die Quelle unter Versionskontrolle, erstellt die Software, führt die Unit-Tests unter nächtlichen Build-Suite. Die hier erstellte Software wird dann in verschiedenen Systemtests und Stresstests verwendet.

Ich denke, dass eines der wichtigsten Unterscheidungsmerkmale für den nächtlichen Build Systemtests sind.

Verwandte Themen