Implementieren von Einschränkungen für die Verzweigungszusammenführung
Einschränkungen für das Mergen von Branches in Versionskontrollsystemen, die von Azure DevOps und GitHub gehostet werden, sind für die Kontrolle der Codequalität entscheidend, da sie die Zusammenarbeit erleichtern und die Stabilität in Softwareentwicklungsprojekten verbessern. Sie helfen Organisationen, Code Reviews zu erzwingen, den erfolgreichen Abschluss automatisierter Tests zu überprüfen und erzwungene Pushs an bestimmte Branches zu verhindern. Diese Einschränkungen tragen dazu bei, die Integrität der Codebasis aufrechtzuerhalten, verhindern versehentliche Änderungen und stellen sicher, dass nur überprüfte und genehmigte Änderungen in Produktionsbranches gemergt werden.
Die allgemeinen Konzepte der Einschränkungen für das Mergen von Branches sind plattformunabhängig. Ihre Implementierung in Azure DevOps und GitHub unterscheidet sich in einigen Punkten, es gibt aber auch viele Ähnlichkeiten, die im Wesentlichen Featureparität zwischen den Lösungen bieten.
Azure DevOps
In Azure DevOps können Sie Einschränkungen für das Mergen von Branches mithilfe von Richtlinien implementieren, die auf dem Branchschutz basieren.
Navigieren Sie zum Implementieren des Branchschutzes im Azure DevOps-Portal zu Ihrem Repository, und wählen Sie den Branch aus, auf den Sie Einschränkungen für das Mergen anwenden möchten. Alternativ können Sie den Schutz auf die aktuellen und zukünftigen Branches beschränken, die einem festgelegten Muster entsprechen. Im Rahmen der Schutzkonfiguration können Sie die folgenden Branchrichtlinien anwenden:
- Mindestanzahl von Reviewern erfordern: Stellt sicher, dass Änderungen nicht ohne die erforderliche Anzahl von Genehmigungen gemergt werden können.
- Auf verknüpfte Arbeitselemente überprüfen: Unterstützt die Nachverfolgbarkeit, indem nach verknüpften Arbeitselementen für Pull Requests gesucht wird.
- Kommentarauflösung prüfen: Überprüft, ob alle Kommentare für Pull Requests aufgelöst wurden.
- Mergetypen einschränken: Steuert den Branchverlauf, indem die verfügbaren Mergetypen beim Abschließen von Pull Requests eingeschränkt werden. Diese Richtlinie umfasst die Möglichkeit, die folgenden Mergetypen selektiv zu aktivieren oder zu deaktivieren:
- Basismerge (kein Vorlauf): Behält den Verlauf genau so bei, wie er während der Entwicklung stattgefunden hat.
- Rebase und Vorlauf: Erstellt einen linearen Verlauf, indem die Quellbranchcommits ohne Mergecommit auf dem Ziel wiedergegeben werden.
- Squashmerge: Erstellt einen linearen Verlauf, indem die Quellbranchcommits zu einem einzigen neuen Commit im Zielbranch zusammengefasst werden.
- Rebase mit Mergecommit: Erstellt einen semilinearen Verlauf, indem die Quellbranchcommits auf dem Ziel wiedergegeben werden und anschließend ein Mergecommit erstellt wird.
Optional können Sie die folgenden Einschränkungen konfigurieren:
- Buildüberprüfung: Überprüft Code durch vorheriges Mergen und Erstellen von Pull Request-Änderungen.
- Statusprüfungen: Erfordert, dass andere Dienste den Status „Erfolgreich“ veröffentlichen, um Pull Requests abzuschließen. Statusprüfungen sind automatisierte Aufgaben, die während des Pull Request-Prozesses ausgelöst werden, um bestimmte Kriterien zu überprüfen, bevor der Pull Request mit dem Zielbranch gemergt werden kann. In Azure DevOps sind Statusüberprüfungen Buildpipelines und Releasepipelines zugeordnet.
- Reviewer automatisch einbeziehen: Legt Code Reviewer fest, die automatisch einbezogen werden, wenn bestimmte Codebereiche durch Pull Requests geändert werden.
Sie haben auch die Möglichkeit, einen Branch durch Schreibschutz zu sperren.
Azure DevOps bietet zwei Optionen zum Umgehen der Richtlinienanforderungen für ein Repository. Um diese zu implementieren, müssen Sie die Standardsicherheitskonfiguration des Repositorys ändern, indem Sie die Berechtigungen zum Ausführen der folgenden Aktionen auf „Zulassen“ festlegen:
- Richtlinien beim Abschließen von Pull Requests umgehen.
- Richtlinien bei Pushvorgängen umgehen.
Diese Berechtigungen dürfen nur Personen gewährt werden, die die Auswirkungen dieser Aktionen auf die Einhaltung der Organisationsstandards verstehen und über ein solides Urteilsvermögen bezüglich ihrer Verwendung verfügen.
GitHub
In GitHub können Sie Einschränkungen für das Mergen von Branches mithilfe von Branchschutzrichtlinien implementieren. Branchschutzrichtlinien definieren, ob Projektmitarbeiter Löschvorgänge oder einen erzwungenen Push im Branch ausführen können, und legen Anforderungen für Pushs in den Branch fest (z. B. erfolgreiche Statusprüfungen oder ein linearer Commitverlauf). Wie bei Azure DevOps können Sie diese Richtlinien basierend auf dem Abgleich mit einem Namensmuster auf bestimmte Branches anwenden.
Navigieren Sie zum Implementieren von Branchschutzregeln auf der GitHub-Weboberfläche zu Ihrem Repository, wählen Sie die Registerkarte „Einstellungen“ und dann im Navigationsmenü das Menüelement „Branches“ aus. Auf diese Weise können Sie auf die Konfiguration der Branchschutzregeln zugreifen. Im Rahmen der Schutzkonfiguration können Sie die folgenden Regeln anwenden:
- Pull Request vor dem Mergen erforderlich: Erfordert, dass Mitwirkende Pull Requests zur Überprüfung und Genehmigung übermitteln, bevor sie ihre Änderungen mergen.
- Bestandene Statusüberprüfungen vor dem Mergen erforderlich: Legt Statusprüfungen fest, die vor dem Mergen erfolgreich abgeschlossen werden müssen. When enabled, commits must first be pushed to another branch, then merged or pushed directly to a branch that matches this rule after status checks have passed.
- Unterhaltungsauflösung vor dem Mergen erforderlich: Erfordert, dass alle Unterhaltungen und Kommentare im Zusammenhang mit Codeänderungen aufgelöst werden, bevor Pull Requests gemergt werden.
- Signierte Commits erforderlich: Erfordert, dass in geschützte Branches gepushte Commits mit überprüften Signaturen signiert sind, wodurch die Sicherheit verbessert und die Authentizität von Codebeiträgen sichergestellt wird.
- Linearer Verlauf erforderlich: Verhindert Mergecommits in geschützten Branches und erzwingt einen linearen Verlauf, wodurch Änderungen leichter nachverfolgt und bei Bedarf rückgängig gemacht werden können. Dies bedeutet, dass für alle Pull Requests ein Squashmerge oder Rebasemerge verwendet werden muss.
- Erfolgreiche Bereitstellungen vor dem Mergen erforderlich: Erfordert, dass in Pull Requests vorgeschlagene Änderungen gründlich getestet und überprüft werden, bevor sie in die Codebasis integriert werden.
- Branch sperren: Sperrt wie das Äquivalent in Azure DevOps den Schreibzugriff auf den Branch.
- Umgehung der obigen Einstellungen nicht zulassen: Verhindert, dass die anderen Regeln von Administratoren und Benutzern mit der Berechtigung zum Umgehen des Branchschutzes umgangen werden.
- Erzwungene Pushs zulassen: Ermöglicht es Benutzern mit Pushberechtigungen, das Pushen von Änderungen zu erzwingen. Wie bei Azure DevOps ist dies nur als Notfallmaßnahme gedacht.
- Löschen zulassen: Ermöglicht Benutzern mit Pushberechtigungen das Löschen geschützter Branches. Diese Flexibilität kann zwar die Branchverwaltung verbessern, bringt aber auch das Risiko versehentlicher oder böswilliger Branchlöschungen mit sich. Die Verwendung dieser Regel sollte daher sorgfältig kontrolliert werden, um Datenverluste zu verhindern und die Integrität des Repositorys aufrechtzuerhalten.