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.
quelle
Antworten:
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.
quelle
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:
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:
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.
quelle
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 .
quelle