Herkömmlicherweise führen CI-Systeme nur eine Überwachung der Qualitätsstufen in einem Integrationszweig durch, indem sie QS-Überprüfungen in der Codebasis durchführen, in der die Änderungen bereits festgeschrieben sind, auf Regressionen achten und Benachrichtigungen für menschliches Eingreifen senden.
Wenn diese Regressionen jedoch erkannt werden, ist die Niederlassung zumindest seit Beginn der jeweiligen QS-Überprüfung bereits in Schwierigkeiten und bleibt in diesem Zustand (oder wird sogar noch schlimmer!), Bis alle Schuldigen identifiziert, Reparaturen für sie begangen und eine neue QS-Überprüfung durchgeführt wurden bestätigt, dass das Qualitätsniveau der Niederlassung wiederhergestellt wurde. Der Zweig kann während dieser ganzen Zeit als für die normale Entwicklung blockiert betrachtet werden.
Gibt es ein CI Werkzeug, das eigentlich verhindern solche Regressionen nicht passiert, die funktionieren würde pre-commit QA Prüfungen und ermöglicht Commits nur , wenn die Code - Basis mit den entsprechenden Commits aktualisiert sein würde , wie auch diejenigen , pre-commit QA Prüfungen vorbei, so dass ein Minimum garantiert Branchenqualitätsniveau?
Update: Es wird davon ausgegangen, dass geeignete automatisierte QS-Überprüfungen mit angemessener Abdeckung, um die jeweiligen Regressionen erkennen zu können, von den CI-Tools aufgerufen werden können.
quelle
Antworten:
Soweit ich das beurteilen kann, suchen Sie nach einem Tool, das Commits ablehnt , die den Build beschädigen. Ein CI-Tool kann Regressionen wahrscheinlich nicht verhindern, indem es Ihren Code tatsächlich repariert, aber es kann Sie davon abhalten, fehlerhaften Code hinzuzufügen zum Repository.
Atlassian hat einige interessante Anwendungen von Git-Hooks :
Wenn Sie Git verwenden, sind die Hooks sehr leistungsfähig (und es gibt ähnliche Hooks für SVN , Mercurial und andere Versionskontrollsysteme), und es kann hilfreich sein, sie zum Ausführen von Pre-Commit-Prüfungen zu verwenden.
Die Git-Dokumentation enthält eine Seite zum Erstellen eines Hooks zum Ablehnen von Pushs, wenn diese bestimmte Kriterien nicht erfüllen, die leicht an diesen Anwendungsfall angepasst werden können.
Viele Leute würden jedoch argumentieren, dass das Ablehnen von Commits eine schlechte Idee für einen
feature
Zweig ist - Sie werden nur Zeit damit verschwenden, gegen Ihr CI-System zu kämpfen, wenn der Build aus irgendeinem Grund unterbrochen wird, anstatt den Fehler tatsächlich zu beheben.In der
master
Verzweigung kann es sinnvoll sein, fehlerhafte Zusammenführungen abzulehnen, da Sie möglicherweise sicherstellen möchten, dass sie immer erstellt werden. Für einenfeature
Zweig, Sie werden unweigerlich Dinge brechen, und da der Code nicht in Produktion geht jetzt , macht es mehr Sinn , nur um dich zu warnen , als tatsächlich Ihre ganz ablehnen begehen.quelle
Kein Tool kann möglicherweise keine Regressionen garantieren - das hängt viel mehr von Ihren Tests ab als von dem Tool, das sie ausführt. Sie können jedoch verhindern, dass Regressionen, die abgefangen werden, in den Integrationszweig gelangen. Sie können dies mit Pre-Commit-Hooks tun, aber es ist oft einfacher mit Pull-Anfragen (die Sie hoffentlich bereits für die Peer-Code-Überprüfung verwenden).
Wenn eine Niederlassung mit ihrem Upstream (zu dem die PR zusammengeführt wird) auf dem neuesten Stand ist und ihre Tests bestanden wurden, werden sie nach der Zusammenführung weiterhin bestanden. Der Status des Zielzweigs nach dem Zusammenführen stimmt mit dem Status des Quellzweigs vor dem Zusammenführen überein.
Es ist im Allgemeinen nicht besonders schwierig (abhängig von den verwendeten Tools) anzugeben, ob der Quellzweig in einem PR mit dem Ziel auf dem neuesten Stand ist und ob er einen passierenden CI-Build hat. Sie können dies als Voraussetzung (nach Richtlinie und / oder in Software erzwungen) zum Zusammenführen der Pull-Anforderung verwenden.
quelle
Echte Tools für die kontinuierliche Integration (im Gegensatz zu nur kontinuierlichen Tests) wie Reitveld und Zuul können helfen, obwohl sie nur so gut sind wie die Tests, die Sie schreiben und die Sie überprüfen.
quelle
Mit GitLAB können Sie in den Projekteinstellungen festlegen, dass eine Zusammenführung nur dann zulässig ist, wenn die Pipeline erfolgreich ist. Sie können also eine wirklich kontinuierliche Integration durchführen. Kombinieren Sie dies mit dem Hinzufügen Ihrer Qualitätssicherung zur Liste der Zusammenführungsgenehmigungen, und mit Dynamic Environments können Sie eine Qualitätssicherung durchführen bevor Sie zum Master verschmelzen.
quelle
ApartCI ist ein CI-System, das genau darauf ausgelegt ist, Regressionen zu verhindern und so ein flaches oder steigendes Qualitätsniveau der Niederlassung zu gewährleisten. Noch in der Beta.
Es koordiniert zentralisierte Überprüfungen vor dem Festschreiben so, dass sichergestellt ist, dass eine Änderung erst festgeschrieben wird, nachdem sie zusammen mit allen anderen zuvor festgeschriebenen Änderungen überprüft wurde, um das neueste Qualitätsniveau der Zweigstelle zu erreichen oder zu übertreffen.
Dies ist der Hauptunterschied zu herkömmlichen entwicklergesteuerten Pre-Commit-Überprüfungen, die häufig parallel durchgeführt werden. Dies lässt Raum für Regressionen, die durch störende Änderungen verursacht werden, die nie zusammen getestet wurden.
Das Tool ist auch einfach zu skalieren - es kann sehr hohe Raten eingehender Kandidatenänderungen aufrechterhalten und 100/1000 Entwickler unterstützen, die in derselben Integrationsbranche arbeiten.
Haftungsausschluss: Ich bin der Autor des Tools und Gründer des Unternehmens, das es anbietet. Entschuldigung für die Anzeige.
quelle