Übung: Schützen Ihres Mainbranchs

Abgeschlossen

Ihr Team arbeitet an einer Bicep-Vorlage, die bereits eine Website und eine Datenbank enthält. Sie haben die Komponenten in Ihrer Produktionsumgebung bereitgestellt. Nun müssen Sie Ihre Bicep-Vorlage aktualisieren, um Ihre Auftragsverarbeitungswarteschlange hinzuzufügen.

In dieser Übung erstellen Sie einen Featurebranch für Ihre Änderung. Außerdem schützen Sie Ihren Mainbranch und lassen nur zu, dass Änderungen im Mainbranch gemergt werden, nachdem sie überprüft wurden. Zuvor müssen Sie jedoch sicherstellen, dass Ihre Umgebung eingerichtet ist, um den Rest dieses Moduls abzuschließen.

In dem Prozess gehen Sie wie folgt vor:

  • Richten Sie ein GitHub-Repository für dieses Modul ein.
  • Klonen Sie das Repository auf Ihrem Computer.
  • Fügen Sie dem Mainbranch Ihres Repositorys Branchschutz hinzu.
  • Erstellen Sie einen lokalen Featurebranch für Ihre Änderung.
  • Versuchen Sie, Ihren Featurebranch mit dem Mainbranch zu mergen.
  • Richten Sie ein Azure DevOps-Projekt für dieses Modul ein.
  • Klonen Sie das Repository des Projekts auf Ihren Computer.
  • Fügen Sie dem Mainbranch Ihres Repositorys Branchrichtlinien hinzu.
  • Erstellen Sie einen lokalen Featurebranch für Ihre Änderung.
  • Versuchen Sie, Ihren Featurebranch mit dem Mainbranch zu mergen.

Abrufen des GitHub-Repositorys

Hier stellen Sie sicher, dass Ihr GitHub Repository für den Rest dieses Moduls eingerichtet ist. Sie richten es ein, indem Sie ein neues Repository basierend auf einem Vorlagenrepository erstellen. Das Vorlagenrepository enthält die Dateien, die Sie für den Einstieg in dieses Modul benötigen.

Starten über das Vorlagenrepository

Führen Sie eine Vorlage aus, mit der Ihr GitHub-Repository eingerichtet wird.

Führen Sie auf GitHub-Website die folgenden Schritte aus, um ein Repository aus der Vorlage zu erstellen:

  1. Wählen Sie Diese Vorlage verwenden>Neues Repository erstellen aus.

    Screenshot: GitHub-Benutzeroberfläche mit dem Vorlagenrepository und hervorgehobener Schaltfläche zur Verwendung der aktuellen Vorlage

  2. Geben Sie einen Namen für das neue Projekt ein, z. B. toy-website-review.

  3. Wählen Sie die Option Public aus.

    Wenn Sie Ihre eigenen Repositorys erstellen, können Sie diese als privat festlegen. In diesem Modul arbeiten Sie mit einigen Features von GitHub, die nur mit öffentlichen Repositorys und GitHub Enterprise-Konten funktionieren.

  4. Wählen Sie Create repository from template (Repository aus Vorlage erstellen) aus.

    Screenshot: GitHub-Benutzeroberfläche mit der Seite zur Repositoryerstellung

Abrufen des Azure DevOps-Projekts

Hier stellen Sie sicher, dass Sie Ihre Azure DevOps-Organisation so eingerichtet haben, dass Sie den Rest dieses Moduls durcharbeiten können. Sie richten sie ein, indem Sie eine Vorlage ausführen, mit der in Azure DevOps ein Projekt erstellt wird.

Führen Sie auf der Website „Azure DevOps Demo Generator“ die folgenden Schritte aus:

  1. Wählen Sie Sign In (Anmelden) aus, und akzeptieren Sie die Nutzungsbedingungen.

  2. Wählen Sie auf der Seite Create New Project (Neues Projekt erstellen) Ihre Azure DevOps-Organisation aus. Geben Sie dann einen Projektnamen ein, z. B. toy-website-review.

    Screenshot: Erstellen eines Projekts über den Azure DevOps-Demo-Generator

  3. Wählen Sie Create Project (Projekt erstellen) aus.

    Die Ausführung der Vorlage dauert einige Zeit. Automatisch werden eine Pipeline und eine Bicep-Datei erstellt, die Sie in späteren Übungen verwenden werden.

  4. Klicken Sie auf Zu Projekt navigieren, um zu Ihrem Projekt in Azure DevOps zu wechseln.

Klonen des Repositorys

Sie verfügen nun über eine Kopie des Vorlagenrepositorys in Ihrem eigenen Konto. Sie klonen dieses Repository jetzt lokal, damit Sie damit arbeiten können.

  1. Wählen Sie Code und dann das Symbol Kopieren aus.

    Screenshot: GitHub-Benutzeroberfläche mit dem neuen Repository und hervorgehobener Schaltfläche zum Kopieren der Repository-URL

  2. Öffnen Sie Visual Studio Code.

  3. Öffnen Sie in Visual Studio Code ein neues Terminalfenster, indem Sie auf Terminal>Neues Terminal klicken. Das Fenster wird in der Regel am unteren Bildschirmrand geöffnet.

  4. Navigieren Sie im Terminal zu dem Verzeichnis, in dem Sie das GitHub-Repository auf Ihrem lokalen Computer klonen möchten. Führen Sie beispielsweise den folgenden Befehl aus, um das Repository in den Ordner toy-website-review zu klonen:

    cd toy-website-review
    
  5. Geben Sie git clone ein, fügen Sie die zuvor kopierte URL ein, und führen Sie dann den Befehl aus. Der Befehl sieht wie folgt aus:

    git clone https://github.com/mygithubuser/toy-website-review.git
    
  6. Öffnen Sie Visual Studio Code erneut im Repositoryordner, indem Sie den folgenden Befehl am Visual Studio Code-Terminal ausführen:

    code -r toy-website-review
    

Sie haben jetzt ein Projekt in Ihrem eigenen Konto. Sie klonen dieses Repository jetzt lokal, damit Sie damit arbeiten können.

  1. Wählen Sie Repos>Dateien aus.

    Screenshot von Azure DevOps mit Menü „Repos“ und hervorgehobenem Element „Dateien“

  2. Wählen Sie Klonen aus.

    Screenshot: Azure DevOps mit dem Repository und hervorgehobener Schaltfläche „Klonen“

  3. Wenn Sie macOS verwenden, benötigen Sie ein spezielles Kennwort, um das Git-Repository zu klonen. Wählen Sie Git-Anmeldeinformationen generieren aus, und kopieren Sie den angezeigten Benutzernamen und das Kennwort an einen sicheren Ort.

  4. Wählen Sie In VS Code klonen aus. Wenn Sie aufgefordert werden, das Öffnen von Visual Studio Code zuzulassen, wählen Sie Öffnen aus.

    Screenshot: Azure DevOps mit Repositoryeinstellungen und hervorgehobener Schaltfläche zum Klonen in Visual Studio Code

  5. Erstellen Sie einen Ordner, der für das Repository verwendet werden soll, und wählen Sie dann Repositoryspeicherort auswählen aus.

  6. Da Sie dieses Repository zum ersten Mal verwenden, werden Sie aufgefordert sich anzumelden.

    • Wenn Sie Windows verwenden, geben Sie dieselben Anmeldeinformationen ein, die Sie zuvor in dieser Übung für die Anmeldung bei Azure DevOps verwendet haben.

    • Wenn Sie macOS verwenden, geben Sie den Git-Benutzernamen und das Kennwort ein, den bzw. das Sie zuvor generiert haben.

  7. Sie werden von Visual Studio Code aufgefordert, den Repositoryspeicherort zu öffnen. Klicken Sie auf Öffnen.

    Screenshot von Visual Studio Code mit einer Aufforderung zum Öffnen des geklonten Repositorys und hervorgehobener Schaltfläche „Öffnen“

Hinzufügen eines Schutzes für den Branch

Konfigurieren Sie Ihr Git-Repository, um direkte Pushs an den Mainbranch zu verhindern.

  1. Wählen Sie in Ihrem Browser Einstellungen aus.

  2. Wählen Sie Branches aus.

  3. Wählen Sie Add branch protection rule (Branchschutzregel hinzufügen) aus.

    Screenshot: Seite zum Hinzufügen von Branchschutzregeln in GitHub, mit hervorgehobener Schaltfläche zum Hinzufügen einer Regel

  4. Geben Sie im Textfeld Branchnamensmusterden Text main ein.

  5. Wählen Sie Pull Request vor dem Zusammenführen anfordern aus.

    Deaktivieren Sie Genehmigungen erfordern. Normalerweise würden Sie diese Option auswählen. In diesem Beispiel führen Sie jedoch Ihren eigenen Pull Request zusammen, und die Option Genehmigungen erfordern verhindert dies.

  6. Wählen Sie Umgehung der oben genannten Einstellungen nicht zulassen aus.

    Sie wählen diese Einstellung als Beispiel aus, um zu zeigen, wie später in dieser Übung bei git push zu main ein Fehler auftritt. In einer Produktionsumgebung sollten Sie direkte Zusammenführungen für Administratoren oder Repositorybesitzer nicht auf main beschränken.

  7. Wählen Sie am unteren Rand der Seite Erstellen aus.

    Screenshot: GitHub mit Schaltfläche zum Erstellen

    GitHub fordert Sie möglicherweise auf, sich erneut anzumelden, um Ihre Identität zu bestätigen.

Hinzufügen von Branchrichtlinien

Konfigurieren Sie Ihr Git-Repository, um direkte Pushs an den Mainbranch zu verhindern.

  1. Navigieren Sie in Ihrem Browser zu Repos>Branches.

  2. Zeigen Sie auf den Branch main, und wählen Sie die drei Punkte aus.

  3. Wählen Sie Branchrichtlinien aus.

    Screenshot: Liste der Branches in Azure DevOps mit angezeigtem Kontextmenü und hervorgehobenem Menüpunkt für Branchrichtlinien

  4. Ändern Sie im Fenster Branchrichtlinien die Einstellung Mindestanzahl von Prüfern erfordern in Ein.

  5. Ändern Sie die Mindestanzahl von Prüfern in 1, und wählen Sie die Option Anforderern die Genehmigung eigener Änderungen gestatten aus.

    Screenshot: Seite „Branchrichtlinien“ in Azure DevOps für den Mainbranch

    Hinweis

    Hier aktivieren Sie die Option Anforderern die Genehmigung eigener Änderungen erstatten. In diesen Übungen arbeiten Sie eigenständig, sodass Sie Ihre Änderungen sowohl erstellen als auch genehmigen müssen. In einer echten Teamumgebung möchten Sie diese Option jedoch möglicherweise nicht aktivieren.

Erstellen eines lokalen Featurebranchs

  1. Führen Sie im Visual Studio Code-Terminal folgende Anweisung aus:

    git checkout -b add-orders-queue
    

    Mit diesem Befehl wird ein neuer Featurebranch erstellt, von dem aus Sie arbeiten können.

  2. Öffnen Sie die Datei main.bicep im Ordner deploy.

    Screenshot: Visual Studio Code mit hervorgehobener Datei „main.bicep“ im Ordner „deploy“

  3. Fügen Sie unterhalb der Parameter eine neue Variable für den Namen der Warteschlange hinzu:

    var storageAccountSkuName = (environmentType == 'prod') ? 'Standard_GRS' : 'Standard_LRS'
    var processOrderQueueName = 'processorder'
    
  4. Fügen Sie in der Speicherkontoressource die Warteschlange als geschachtelte untergeordnete Ressource hinzu:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
      name: storageAccountName
      location: location
      sku: {
        name: storageAccountSkuName
      }
      kind: 'StorageV2'
      properties: {
        accessTier: 'Hot'
      }
    
      resource queueServices 'queueServices' existing = {
        name: 'default'
    
        resource processOrderQueue 'queues' = {
          name: processOrderQueueName
        }
      }
    }
    
  5. Fügen Sie in der appService-Moduldefinition die Speicherkonto- und Warteschlangennamen als Parameter hinzu:

    module appService 'modules/appService.bicep' = {
      name: 'appService'
      params: {
        location: location
        appServiceAppName: appServiceAppName
        storageAccountName: storageAccount.name
        processOrderQueueName: storageAccount::queueServices::processOrderQueue.name
        environmentType: environmentType
      }
    }
    

    Mit diesem Code kann die Anwendung die Warteschlange finden, an die Nachrichten gesendet werden sollen.

  6. Öffnen Sie die Datei main.bicep.

  7. Öffnen Sie die Datei appService.bicep im Ordner deploy/modules.

  8. Fügen Sie am Anfang der Datei appService.bicep neue Parameter für die Speicherkonto- und Warteschlangennamen hinzu:

    @description('The Azure region into which the resources should be deployed.')
    param location string
    
    @description('The name of the App Service app to deploy. This name must be globally unique.')
    param appServiceAppName string
    
    @description('The name of the storage account to deploy. This name must be globally unique.')
    param storageAccountName string
    
    @description('The name of the queue to deploy for processing orders.')
    param processOrderQueueName string
    
    @description('The type of the environment. This must be nonprod or prod.')
    @allowed([
      'nonprod'
      'prod'
    ])
    param environmentType string
    
  9. Aktualisieren Sie die appServiceApp-Ressource, um die Speicherkonto- und Warteschlangennamen an die Umgebungsvariablen der Anwendung zu verteilen:

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          appSettings: [
            {
              name: 'StorageAccountName'
              value: storageAccountName
            }
            {
              name: 'ProcessOrderQueueName'
              value: processOrderQueueName
            }
          ]
        }
      }
    }
    

Committen und Pushen Ihres Featurebranchs

Committen und pushen Sie Ihre Änderungen in Ihr Git-Repository, indem Sie die folgenden Befehle im Visual Studio Code-Terminal ausführen:

Committen und pushen Sie Ihre Änderungen in Ihr Azure Repos-Repository, indem Sie die folgenden Befehle im Visual Studio Code-Terminal ausführen:

git add .
git commit -m "Add orders queue and associated configuration"
git push --set-upstream origin add-orders-queue

Der Featurebranch wird an einen neuen Branch in Ihrem Remoterepository gepusht, der auch add-orders-queue genannt wird.

Versuchen, den Featurebranch mit dem Mainbranch zusammenzuführen

Sie haben gelernt, warum es nicht ratsam ist, direkt an den Mainbranch zu pushen. Hier versuchen Sie, diese Richtlinie zu brechen, damit Sie sehen können, wie der Schutz Ihres Mainbranchs verhindert, dass Sie Ihre Änderungen versehentlich in einen geschützten Branch pushen.

  1. Führen Sie im Visual Studio Code-Terminal die folgenden Anweisungen aus, um zum Mainbranch zu wechseln und den Branch add-orders-queue damit zu mergen:

    git checkout main
    git merge add-orders-queue
    

    Der Befehl funktionierte, aber Sie haben den Branch add-orders-queue nur in Ihrem lokalen Git-Repository mit Ihrem Mainbranch gemergt.

  2. Führen Sie die folgende Anweisung aus, um zu versuchen, Ihre Änderungen an GitHub zu pushen:

    git push
    

    Beachten Sie, dass bei Ihrem Push ein Fehler mit etwa folgender Meldung auftritt:

    Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
    remote: error: GH006: Protected branch update failed for refs/heads/main.
    remote: error: Changes must be made through a pull request.
    To https://github.com/mygithubuser/toy-website-review.git
     ! [remote rejected] main -> main (protected branch hook declined)
    error: failed to push some refs to 'https://github.com/mygithubuser/toy-website-review.git'
    

    Die Fehlermeldung weist Sie darauf hin, dass Pushs an den Mainbranch nicht zulässig sind, und dass Sie einen Pull Request verwenden müssen, um den Branch zu aktualisieren.

  3. Führen Sie die folgende Anweisung aus, um den Merge rückgängig zu machen:

    git reset --hard HEAD~1
    

    Dieser Befehl weist Ihr lokales Git-Repository an, den Status des Mainbranchs in den Zustand vor dem Mergen des letzten Commits zurückzusetzen, und nicht, die Änderungen zu speichern. Der Branch add-orders-queue ist nicht betroffen.

Sie haben gelernt, warum es nicht ratsam ist, direkt an den Mainbranch zu pushen. Hier versuchen Sie, diese Richtlinie zu brechen, damit Sie sehen können, wie die Branchrichtlinien verhindern, dass Sie Ihre Änderungen versehentlich in einen geschützten Branch pushen.

  1. Führen Sie im Visual Studio Code-Terminal die folgenden Anweisungen aus, um zum Mainbranch zu wechseln und den Branch add-orders-queue damit zu mergen:

    git checkout main
    git merge add-orders-queue
    

    Der Befehl funktionierte, aber Sie haben den Branch add-orders-queue nur in Ihrem lokalen Git-Repository mit Ihrem Mainbranch gemergt.

  2. Führen Sie die folgende Anweisung aus, um zu versuchen, Ihre Änderungen an Azure Repositorys zu pushen:

    git push
    

    Beachten Sie, dass bei Ihrem Push ein Fehler mit etwa folgender Meldung auftritt:

    Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
    To https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review
    ! [remote rejected] main -> main (TF402455: Pushes to this branch are not permitted; you must use a pull request to update this branch.)
    error: failed to push some refs to 'https://dev.azure.com/mytoycompany/toy-website-review/_git/toy-website-review'
    

    Die Fehlermeldung weist Sie darauf hin, dass Pushs an den Mainbranch nicht zulässig sind, und dass Sie einen Pull Request verwenden müssen, um den Branch zu aktualisieren.

  3. Führen Sie die folgende Anweisung aus, um den Merge rückgängig zu machen:

    git reset --hard HEAD~1
    

    Dieser Befehl weist Ihr lokales Git-Repository an, den Status des Mainbranchs in den Zustand vor dem Mergen des letzten Commits zurückzusetzen, und nicht, die Änderungen zu speichern. Der Branch add-orders-queue ist nicht betroffen.