Muster für kontinuierliche Integration und DVCS


12

Wir verwenden derzeit Subversion und TeamCity, wir werden Mercurial verwenden (speziell Kiln, da wir FogBugz-Benutzer sind).

Dies wird natürlich zu Änderungen - hoffentlich zu Verbesserungen - in unseren Entwicklungsmustern führen (wir beide!), Aber ich habe Schwierigkeiten damit, die Dinge so zu strukturieren, dass wir immer noch die Vorteile einer kontinuierlichen Integration / unseres CI-Servers genießen ( dass es Vorteile gibt und auch bleiben wird, ist eine Selbstverständlichkeit, deren Erörterung außerhalb des Rahmens dieser Frage liegt.

Mit SVN legen wir eine begrenzte Anzahl zentraler Repositorys fest - effektiv eines pro Projekt (mehr oder weniger eine Visual Studio-Lösung), sodass Sie auf einfache Weise einen Build auslösen und die Gewissheit gewinnen können, dass alle Dateien festgeschrieben wurden und keine vorhanden sind Streuabhängigkeiten usw. usw. Aber wenn wir die Vorteile von Quecksilber nutzen wollen, werden wir mehr Repository-Instanzen haben wollen - wo ich erwarten würde, dass Änderungen im Allgemeinen in Richtung eines definitiven "Live" -Repo fließen. Das Problem, mit dem ich zu kämpfen habe, ist, dass das Live-Repo zu spät zu sein scheint, um meine CI-Builds auszulösen. OTOH Ein CI-Build pro Projekt und Entwickler ist wahrscheinlich übermäßig (und verursacht andere Probleme).

Ich fische ein bisschen, aber das liegt daran, dass eines der Dinge, die ein zentrales Subversion-Repo (ich, mit unserem Setup!) Gibt, viel Klarheit darüber ist, was wann gebaut werden soll.


nb Ich frage nicht nach der Mechanik der Verwendung von Quecksilber mit kontinuierlicher Integration - ich habe das Vergnügen, ein persönliches Projekt, seine Muster und Strukturen und Arbeitspraktiken / Arbeitsabläufe zu bearbeiten, die ich mir überlegen möchte.


Warum ist es Ihrer Meinung nach zu spät, Builds aus dem zentralen / "Live" -Repo auszulösen?
c_maker

Wenn Sie noch nicht dort waren, empfehlen wir Ihnen, die Website für den Austausch von Ofenstapeln ( kiln.stackexchange.com ) aufzusuchen . Sie haben ziemlich viel Inhalt darüber, wie dies eingerichtet wird (hier ist einer: kiln.stackexchange.com/questions/29/… . Persönlich verwenden wir einen Zweig pro Feature und weisen den Build-Server auf unseren "Master" -Zweig. )
Chris Phillips

@ Chris - Ich habe, gibt es nicht wirklich, nicht auf das CI-Problem ...
Murph

Antworten:


2

Erstens ist es der richtige Weg, mehrere Builds pro Projekt in TeamCity zu haben. Die Art der Plattform macht es wirklich einfach - die Schaltfläche zum Kopieren gibt es aus einem Grund.

In jedem Fall, als wir auf SVN waren, haben wir normalerweise zwei Builds für jedes Projekt ausgeführt - einen, der auf die Hauptentwicklungslinie (in unserem Fall den Stamm) und einen, der auf unseren Veröffentlichungszweig zeigte. Wir führten diesen Setup Build HG über während im Anschluss an einem Verzweigungsmodell ähnlich wie diese . Die einzige echte Herausforderung bestand darin, einen neuen Funk-Schwea über Build-Nummern zu finden, da wir die aktuelle SVN-Revisionsnummer nicht mehr verwenden konnten.

Wir versuchen, die Leute zu ermutigen, relativ oft zu pushen, besonders dann, wenn viel auf einmal gearbeitet wird und wir schnellere Feedback-Zyklen wollten. Nur weil es ein DCVS ist, heißt das nicht, dass Sie nur einmal am Tag pushen müssen oder so.


Wyatt, meiner Meinung nach sollte Push auftreten, wenn Sie eine abgeschlossene Arbeitseinheit (ish) haben - einer der Vorteile von DVCS ist, dass wir fehlerhaften Code lokal festschreiben können. Ich mag es wirklich nicht, irgendetwas nach einem Zeitplan zu machen, weil es das Ende des Tages ist. Es gibt eine separate Ausgabe von "Backup", bei der es - für mich - darum geht, eine Regel zu erstellen, die beim Festschreiben seitwärts verschoben wird - auf einen anderen Klon, der nur als Backup existiert.
Murph

2
Trick gibt es, was ist die Definition der Arbeitseinheit? Ist es "diese Funktion ist abgeschlossen" oder ist es "dieser Stein ist erfolgreich gelegt". Wir tendieren zu Letzterem, insbesondere bei jenem Verzweigungsmodell, bei dem es einen klar abgegrenzten Entwicklungszweig gibt. Das Brechen von Sachen sollte am besten über Zweige erfolgen. Langfristige Versionen können nach Möglichkeit auch CI-Builds erhalten. Besonders wenn es mehrere Köche in der Küche gibt.
Wyatt Barnett

Ich stimme Ihrer Definition von "Arbeitseinheit" zu, weshalb ich ein wenig mit meinem Gesamtmodell zu kämpfen habe (das bereits mehrere Builds pro Projekt enthält, um sowohl CI-Builds als auch Deployment-Builds zu berücksichtigen). Sie haben Recht, die Antwort ist, viele Builds zu verkabeln, und am Ende wird mein eigentliches Problem darin bestehen, den Scheck zu unterschreiben! Das referenzierte Verzweigungsmodell sieht auch ungefähr richtig aus. Berücksichtigt man immer noch das Gesamtmuster (und lässt zu, dass es weiter angepasst wird, um die Besonderheiten von Kilnhg zu berücksichtigen)
Murph

2

Wir benutzen Kiln seit ungefähr einem Jahr und haben verschiedene Dinge ausprobiert. Wir verwenden benannte Verzweigungen (im Gegensatz zu Verzweigungsklonen) mit der folgenden Verzweigungsstrategie:

  • Standard verfolgt "abgeschlossene" Entwicklung
  • Feature-Zweige verfolgen derzeit laufende Arbeiten
  • Geben Sie Zweige frei, verfolgen Sie Punkte, an denen wir standardmäßig freigegeben haben

Die Arbeit beginnt also mit dem Erstellen eines Feature-Zweigs ausgehend von der aktuellen Standardeinstellung . Wenn der Feature-Zweig fertig ist *, wird der Zweig geschlossen und wieder mit dem Standard zusammengeführt .

Irgendwann entscheiden wir uns, dass wir bereit sind, zu veröffentlichen, und erstellen daher standardmäßig einen neuen Veröffentlichungszweig aus dem aktuellen Tipp . Auf diese Weise können wir Änderungen an dem Code vornehmen, der derzeit in der Produktion ist, indem wir den Release-Zweig übernehmen und gleichzeitig die aktive Entwicklung für die Feature-Zweige und den Standard zulassen .

Bei der kontinuierlichen Integration machen wir zwei Dinge:

  • Eine "Always-On" -Integration, die den Standardstatus überwacht
  • Neue Integrationen für jeden Release-Zweig

Mit dem Standard- Zweigjob wissen wir, dass unser Hauptquellbaum immer stabil ist - mit den Veröffentlichungszweigjobs wissen wir, dass diese Zweige stabil sind und liefern uns die Build-Ausgabe, die wir benötigen, um eine Veröffentlichung in die Produktion zu bringen.

* Unsere Definition von "erledigt" ist, dass die Funktion auf dem neuesten Stand ist und bei der Codeüberprüfung genehmigt wurde.


1

Wenn Sie zu einem DVCS wie Hg wechseln, erhalten Sie nicht nur den "verteilten Teil", sondern auch die volle Leistung des guten Verzweigens und Zusammenführens.

In Anbetracht dessen, dass Sie jetzt einen guten Issue Tracker und ein gutes SCM haben, warum nicht für jede Aufgabe eine Verzweigung erstellen?

Das Muster "Branch per Task" ist nicht neu (siehe Berczuks Buch), aber es ist definitiv ein Versuch.

Ich habe es hier ausführlich erklärt und die Vor- und Nachteile von CI vs "kontrolliert" hier .


Ich würde eher "besser" als "gut" sagen, da ich glücklich, enthusiastisch und erfolgreich sowohl Feature- als auch Wartungszweige ausgeführt und mit Subversion zusammengeführt habe (-:
Murph
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.