wie man effizient bleibt, wenn ein Build fast immer kaputt ist

25

Ich arbeite in einem mittelgroßen Team, das denselben Quellcode verwendet und zwar weiterhin integriert ist, aber da wir alle in derselben Branche arbeiten müssen, ist der Build fast immer fehlerhaft.

Da wir auch eine Regel haben, die kürzlich eingeführt wurde, um die kaputten Builds zu lindern, die besagt, dass niemand einchecken darf, während gebaut wird, ist sie rot.

Trotzdem haben alle an einem Tag eine Handvoll Zeitfenster von 10-15 Minuten, an denen wir einchecken durften.

Und während das Team wächst, werden die Zeitfenster für Check-in-Möglichkeiten immer kürzer. Das zwingt Entwickler, ihre Änderungen lokal zu akkumulieren, was zu größeren Änderungsmengen führt, die noch schwieriger sicherzustellen sind, dass die Änderungen nichts kaputt machen. Sie können den Teufelskreis sehen.

Was können Sie empfehlen, damit ich in einem solchen Umfeld effektiv arbeiten kann? Denken Sie auch daran, dass ich ein Entwickler und kein Manager bin und den Prozess oder das Verhalten anderer Menschen nicht wesentlich ändern kann.


quelle
8
Warum kannst du keine Zweige haben?
Zavior
6
scheinbare Lösung wäre Ihren „persönlichen“ Zweig einzurichten und in sie zu begehen, dann mit einem um diesen Zweig zu integrieren , dass Team arbeitet in
gnat
@Verhalten mit einer Verzweigung bedeutet eine zusätzliche Komplexität und damit zusätzliche Arbeit - das Zusammenführen von einer Verzweigung in einen Stamm. Und es wird immer komplexer - ich müsste nicht nur den Kofferraum auf dem neuesten Stand halten, ich müsste das auch für meine Niederlassung tun.
6
@Andrew Änderungen an der lokalen Maschine zu sammeln, ist das erste, was man loswerden muss, egal was passiert. Andere Probleme, die Sie erwähnen, sind auch real, aber dieses
Problem muss
6
Ich verstehe wirklich nicht , wie sie Veränderungen drängen werden können , wenn sie nicht lokal aktualisiert haben, und warum sie gebrochen sind Drückens überhaupt baut TBH
Useless

Antworten:

54

Zunächst dieser Kommentar:

... eine Niederlassung zu haben bedeutet eine zusätzliche Komplexität und damit zusätzliche Arbeit ...

ist völlig falsch. Ich höre es oft von Leuten, die nicht daran gewöhnt sind, sich zu verzweigen, aber es ist immer noch falsch.

Wenn viele Entwickler Änderungen lokal akkumulieren, bilden ihre lokalen Änderungen einen De-facto-Zweig des Haupt-Repositorys.

Wenn sie endlich vorantreiben, ist dies eine de-facto-Fusion .

Die Tatsache, dass Ihre Zweige und Zusammenführungen implizit sind, beseitigt nicht die zusätzliche Komplexität, die Sie befürchten, sondern verbirgt sie nur. Die Wahrheit ist, dass es Ihnen (Plural = das ganze Team) helfen kann, diesen Prozess explizit zu machen, um zu lernen, wie man damit umgeht.


Jetzt sagst du

niemand darf einchecken, während zu bauen ist rot

In diesem Fall kann der Build jedoch nie repariert werden, sodass er nicht ganz genau sein kann.

Wenn es sinnvoll ist, lokal zu erstellen (dh der Build ist nicht zu groß oder zu langsam), sollten Entwickler dies im Allgemeinen tun, bevor sie es trotzdem tun.

Ich nehme an, dass dies nicht der Fall ist, weil sie dann keine kaputten Builds weitergeben würden, aber es wäre großartig, wenn Sie diesen Punkt klarstellen könnten.

Im Allgemeinen ist die Antwort auf

wie man effizient bleibt, wenn ein Build fast immer kaputt ist

ist: Hör auf den Build zu brechen .

Nutzlos
quelle
23
+9000 für "Hör auf, den Build zu brechen." Ernst. Der ganze, ganze Punkt der kontinuierlichen Integration besteht darin, das Brechen des Builds zu stoppen und, falls es gebrochen wird, es so schnell und so nahe wie möglich am Bruch zu beheben.
Patrick Hughes
@Useless, ich mag deine allgemeine Antwort, aber ich denke, ich hätte meine Frage korrigieren sollen. Ich persönlich breche den Build nicht und gleichzeitig möchte ich keine Wellen erzeugen, die andere stark antreiben, damit sie den Build nicht mehr brechen. Ich mag es zu wissen - gibt es irgendetwas, das ich SELBST tun könnte, um produktiver zu bleiben, in einer Umgebung, in der der Build oft kaputt ist, und ich erwarte nicht, dass sich dieser kaputte Zustand bald ändern wird? Möchte deinen Beitrag dazu. Prost.
6
Nun, Sie können an Ihrem eigenen Zweig arbeiten und selektiv festlegen, welche Upstream-Änderungen Sie in diesem Zweig zusammenführen (dh möglicherweise nur zusammenführen, wenn der Build grün ist). Dies reduziert jedoch die Interaktion mit dem Rest des Teams erheblich, da es insgesamt besser ist, das Team so zu reparieren, dass Sie vernünftig interagieren können.
Nutzlos
14

Entwickler ... akkumulieren ihre Änderungen lokal ... Sie können den Teufelskreis sehen.

Es ist in der Tat bösartig. Änderungen vor Ort zu akkumulieren, ist eine große rote Fahne, die darauf hinweist, dass etwas im Entwicklungsprozess stark verrottet ist. Es macht den ganzen Zweck eines Versionskontrollsystems zunichte .

Solange Sie sich von Änderungen des Prozesses oder des Verhaltens anderer Personen fernhalten möchten, besteht die natürlichste Lösung darin, eine eigene Filiale einzurichten und diese zu verwenden, um Ihre Änderungen zu "akkumulieren" Chance).

Wenn es mehr Leute wie Sie gibt, können Sie sogar zusammenarbeiten und einen gemeinsamen Entwicklungszweig einrichten , um Ihre Updates frei auszutauschen, ohne inkompetente Verwaltungsideen zu beeinträchtigen. Das Verzweigen ermöglicht viele verschiedene Möglichkeiten, um die Teamarbeit zu vereinfachen.

  • Randbemerkung: Jedes Mal, wenn dieser Manager etwas tut oder sagt, das Sie dazu zwingt, Verpflichtungen zu vermeiden, den Code lokal zu halten, übersetzen Sie seine Worte in ein kühnes und klares "Ich bin inkompetent" .

Bitte denken Sie daran, dass ich ein Entwickler und kein Manager bin und den Prozess oder das Verhalten anderer Menschen nicht wesentlich ändern kann ...

Aus Gründen der Präzision, die Sie tatsächlich können , sind diese Fragen von Einfluss und Kommunikationsfähigkeiten und man nicht wirklich in Machtposition zu ändern Dinge sein müssen , nach ihrem Geschmack (das Web für so etwas wie „verwalten“ , wenn Sie sind an weiteren Details interessiert).

Jedoch , dass die recht umständlich und Mühe aufwendig und ich kann durchaus verstehen , wenn man einfach bleiben vorzieht , konzentrierte sich auf Codierung, mit wenig Engagement in der Politik - so , wenn Sie nicht wollen (obwohl in der Theorie Sie können ), das ist verständlich. :)

Mücke
quelle
7

Ich bin sensibel für die Vorstellung, dass Sie sich machtlos fühlen, die Umgebung zu verändern, aber ich denke, diese Situation ist eine ernsthafte Herausforderung für Ihre Professionalität als Programmierer.

Was würde passieren, wenn ein Chirurg schmutzige Skalpelle zusammen mit den sauberen aufbewahrt? Was würde passieren, wenn ein Klempner die von ihm verlegten Rohre nicht testen würde? Was würde passieren, wenn ein Geiger immer verstimmt mit dem Orchester spielte?

Warum sollten Programmierer von Teamarbeit und Höflichkeit befreit sein? Als Mitglied dieses Teams tragen Sie gemeinsam die Verantwortung für das Ergebnis. Es ist unverantwortlich, das Team zu ignorieren, da es seine eigenen Anstrengungen sabotiert.

Ich bin neugierig, woher die Regel kommt, dass "niemand einchecken darf, während gebaut wird"? Es ist eine gute Regel, wenn sich dann jeder darauf konzentriert, den Build zu reparieren. Ich würde versuchen, mit gutem Beispiel voranzugehen und den Build zu reparieren, wenn er kaputt ist. Seien wir ehrlich, sonst erledigen Sie sowieso nichts. Wenn Sie das ärgert, würde ich vorschlagen, diese Bedenken auszudrücken. Die Stimme von jemandem, der aktiv versucht, eine Situation zu verbessern, hat mehr Einfluss als der Mann, der in der Ecke murrt.

Steve Jackson
quelle
5

Ich denke, solange Sie denken, dass Sie "nur ein Entwickler" sind und daher nichts an den Dingen ändern können, die Sie unter diesem Problem leiden werden.

Was Sie tun müssen, ist, dass Sie jedes Mal, wenn jemand den Build bricht, jedes Commit aus dem Repository rückgängig machen müssen, und dann diesem Typen mitteilen müssen, dass er den Build gerade abgebrochen hat und das aufhören muss. Sie müssen dem Manager diese Situation auch erklären und ihm mitteilen, dass die Produktivität Ihres Teams unter diesem Problem leidet.

Sie müssen alles in Ihrer Macht Stehende tun, um den Prozess besser zu ändern und sich später zu entschuldigen, anstatt um Erlaubnis zu bitten.

Ich denke , dass Sie und Ihr Team in einer Situation, wobei die Prozessanforderungen geändert werden und Sie können nicht effizient mit dem gebrochenen Modell arbeiten. Ich denke auch, dass es in Ihrer Verantwortung liegt, etwas gegen dieses Problem zu unternehmen, wenn Sie es erkannt haben. Wenn niemand anderes etwas gegen das Problem unternehmen wird, sind Sie derjenige, der es tun muss!

hequ
quelle
-2 und niemand möchte teilen warum .. heh heh.
Hequ
1
Sie können kein Omelett machen, ohne ein paar Eier zu brechen.
William Payne
2

Ich kann mich auf Ihre Notlage beziehen, ich sah mich mit meinem letzten Projekt bei der Arbeit einer ähnlichen Situation gegenüber. Wir haben schließlich eine Art „heiße Kartoffel“ System implementiert, wo der Entwickler, die zuletzt den Build brach musste babysit / nanny / überwachen, bis es wurde festgelegt und bestanden alle unsere Verifikationstests.

Dies war erfolgreich, da die Erstellungs- und Überprüfungstests routinemäßig ~ 4 Stunden dauerten. Wenn Sie also den Build abbrechen, verlieren Sie einen halben Tag, um echte Arbeit zu leisten. Unnötig zu erwähnen, dass Entwickler die Zweige effizienter nutzen, bevor sie in den Trunk integriert werden. Für die meisten Entwickler lautete die vorherige Einstellung: "Ich lasse mich vom CI-Build-System benachrichtigen, wenn mein Code kaputt ist."

Sam Miller
quelle
1

Eine einfache Änderung am CI-System würde dies bewirken: Jede Änderung, die den Build bricht, wird automatisch rückgängig gemacht. Lassen Sie das CI-Repository sogar zu einem Staging-Bereich werden, in dem Änderungen nur dann in das autorisierende Repository übertragen werden, wenn der Build grün ist. Tools wie Gerrit können hier helfen.

William Payne
quelle
3
Aber um diese Aufgabe unmöglich zu machen "...
denke
@SChepuriIhr Prozess ist ineffizient, Sie müssen den Prozess ändern, Punkt. Als Entwickler sind Sie möglicherweise nicht in der Lage, die Änderung zu genehmigen, aber Sie können immer auf eine Prozessverbesserung hinarbeiten.
7.
1

Zwei andere Dinge könnten hier helfen:

  • Kann Ihr Team einen CI-Build vor Ort rauchen? Wenn Sie sicherstellen, dass Sie den Build nicht brechen - oder zumindest nicht auf übliche Weise brechen, ohne das Management und den Teamgeist festschreiben und auslösen zu müssen.
  • Es gibt viele Möglichkeiten, fehlerhafte Builds zu definieren, je nachdem, wie Sie das CI erstellen. Dies schließt die Definition von "gebrochen" ein. Bei starker Entwicklung betrachten wir nicht das Scheitern von Tests als Pause, sondern als weiteres Ziel, auf das hingearbeitet werden soll.

Aber du solltest dir wirklich Äste anschauen.

Wyatt Barnett
quelle