Übung: Veröffentlichen eines Moduls in einer Registrierung

Abgeschlossen

In Ihrem Spielzeugunternehmen haben Sie Ihre Bicep-Module bisher in einer Registrierung veröffentlicht. Sie haben den Veröffentlichungsprozess manuell auf Ihrem eigenen Computer durchgeführt. Nun möchten Sie einen Workflow für den Veröffentlichungsprozess erstellen.

In dieser Übung führen Sie die folgenden Schritte aus:

  • Erstellen Sie eine Containerregistrierung für Ihre Bicep-Module.
  • Fügen Sie dem Workflow einen Lintauftrag hinzu.
  • Fügen einen Workflowauftrag hinzu, um das Modul in Ihrer Registrierung zu veröffentlichen.
  • Stellen Sie sicher, dass Ihr Workflow erfolgreich ausgeführt wird.
  • Überprüfen Sie das veröffentlichte Modul in Ihrer Registrierung.

Erstellen einer Containerregistrierung

Sie müssen eine Registrierung für Ihre Organisation erstellen, um Module veröffentlichen zu können. Hier verwenden Sie das Azure-Portal zum Erstellen einer Registrierung.

  1. Erstellen Sie in Ihrem Browser im Azure-Portal eine neue Containerregistrierung.

  2. Wählen Sie auf der Registerkarte Grundlagen das Zielabonnement und die zuvor erstellte Ressourcengruppe ToyReusable aus.

  3. Geben Sie einen Namen für die Registrierung und einen Standort in der Nähe ein.

    Wichtig

    Der Registrierungsname muss innerhalb von Azure eindeutig sein und aus 5 bis 50 alphanumerischen Zeichen bestehen. Das Häkchen neben dem Registrierungsnamen zeigt an, dass der von Ihnen ausgewählte Name verfügbar ist.

  4. Um den Tarif zu sehen, wählen Sie Basic.

    Ändern Sie die Standardwerte der anderen Konfigurationseinstellungen nicht.

  5. Klicken Sie auf Überprüfen + erstellen.

    Screenshot: Azure-Portal mit der Seite zum Erstellen der Containerregistrierung

  6. Wenn die Meldung Überprüfung erfolgreich angezeigt wird, wählen Sie Erstellen aus.

    Warten Sie, bis die Bereitstellung abgeschlossen ist (in der Regel 1-2 Minuten).

  7. Wenn die Nachricht Bereitstellung erfolgreich angezeigt wird, wählen Sie Zu Ressource wechseln aus, um die Containerregistrierung zu öffnen.

    Screenshot: Seite zum Bereitstellen der Containerregistrierung im Azure-Portal mit hervorgehobener Schaltfläche „Zu Ressource wechseln“

  8. Notieren Sie sich den Wert der Einstellung Anmeldeserver, die im Bereich Übersicht der Containerregistrierung angezeigt wird. Der Name ähnelt yourregistryname.azurecr.io.

    Screenshot: Azure-Portal mit Anzeige von Details zur Containerregistrierung und hervorgehobenem Anmeldeserver

    Sie benötigen diesen Wert in Kürze.

Hinzufügen einer Modulmetadatendatei

In der vorherigen Einheit haben Sie gelernt, wie wichtig es ist, eine Strategie für die Versionsverwaltung Ihrer Module zu haben. Sie haben auch gelernt, wie Sie Modul-Metadatendateien verwenden können, um die Haupt- und Nebenversionsnummer Ihres Moduls innerhalb eines Workflows anzugeben. Hier fügen Sie eine Metadatendatei für Ihr Speicherkontomodul hinzu.

  1. Erweitern Sie in Visual Studio Code den Ordner modules/storage-account im Stammverzeichnis Ihres Repositorys.

  2. Erstellen Sie eine neue Datei mit dem Namen metadata.json.

    Screenshot: Visual Studio Code mit Anzeige des Speicherorts der Datei „metadata.json“

  3. Fügen Sie der Datei Folgendes hinzu:

    {
      "version": {
        "major": 1,
        "minor": 2
      }
    }
    

    Beachten Sie, dass Sie die Haupt- und Nebenversionsnummern in der Metadatendatei separat definieren. Wenn Ihr Workflow ausgeführt wird, kombiniert der Workflow diese Zahlen zusammen mit der Ausführungsnummer des Workflows, um eine vollständige Versionsnummer zu bilden.

  4. Speichern Sie die geänderte Datei.

Aktualisieren der Workflowdefinition und Hinzufügen eines Lintauftrags

Ihr Repository enthält den Entwurf eines Workflows, den Sie als Startpunkt verwenden können.

  1. Erweitern Sie in Visual Studio Code den Ordner .github/workflows im Stammverzeichnis des Repositorys.

  2. Öffnen Sie die Datei module-storage-account.yml.

    Screenshot: Visual Studio Code mit Anzeige des Speicherorts der Workflowdefinitionsdatei

  3. Aktualisieren Sie den Wert der Umgebungsvariablen MODULE_REGISTRY_SERVER auf den Servernamen der Containerregistrierung. Sie haben diesen Namen vorhin in dieser Übung kopiert.

    Wenn der Anmeldeserver Ihrer Registrierung beispielsweise yourregistryname.azurecr.io ist, sieht Ihr Code wie dieses Beispiel aus:

    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
  4. Fügen Sie am unteren Rand der Daten für den Kommentar # To be added die folgende Definition für die Lintauftragsphase hinzu:

    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    

Hinzufügen eines Veröffentlichungsauftrags zu Ihrem Workflow

Jetzt können Sie einen zweiten Auftrag zum Veröffentlichen des Moduls in Ihre Containerregistrierung hinzufügen.

  1. Fügen Sie am Ende der Datei module-storage-account.yml den ersten Teil der Definition des Veröffentlichungsauftrags hinzu.

    publish:
      runs-on: ubuntu-latest
      needs: [ lint ]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    Die ersten beiden Schritte in dieser Definition sind das Auschecken des Codes aus Ihrem Repository und die Anmeldung bei Azure.

  2. Fügen Sie unterhalb des gerade hinzugefügten Codes einen anderen Schritt hinzu, um die Versionsnummer aus der Datei metadata.json Ihres Moduls zu lesen und sie als Umgebungsvariable festzulegen.

    - name: Get module version number
      run: |
        majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
        versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
        echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
    

    Der Schritt führt ein Skript aus, das die jq-Befehlszeilenanwendung verwendet, um die JSON-Datei zu analysieren.

  3. Fügen Sie hinter dem gerade erstellten Schritt einen letzten Schritt hinzu, um das Modul in der Registrierung zu veröffentlichen.

    - uses: azure/cli@v1
      name: Publish module
      with:
        inlineScript: |
          az bicep publish \
            --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
            --file ${{ env.MODULE_FILE_PATH }}
    

    Beachten Sie, dass dieser Schritt den Wert des Arguments --target dynamisch erstellt. Er kombiniert den Wert des Registrierungsservers, den Modulnamen und die Versionsnummer.

  4. Speichern Sie die geänderte Datei.

Überprüfen und Committen Ihrer Workflowdefinition

  1. Stellen Sie sicher, dass die Datei module-storage-account.yml wie im folgenden Beispiel aussieht:

    name: module-storage-account
    concurrency: module-storage-account
    
    on:
      workflow_dispatch:
      push:
        branches:
          - main
        paths:
          - 'modules/storage-account/**'
    
    permissions:
      id-token: write
      contents: read
    
    env:
      MODULE_NAME: storage-account
      MODULE_REGISTRY_SERVER: yourregistryname.azurecr.io
      MODULE_FILE_PATH: modules/storage-account/main.bicep
      MODULE_METADATA_FILE_PATH: modules/storage-account/metadata.json
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file ${{ env.MODULE_FILE_PATH }}
    
      publish:
        runs-on: ubuntu-latest
        needs: [ lint ]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - name: Get module version number
          run: |
            majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' ${{ env.MODULE_METADATA_FILE_PATH }} -r )
            versionNumber="$majorMinorVersionNumber.${{ github.run_number }}"
            echo "MODULE_VERSION=$versionNumber" >> $GITHUB_ENV
        - uses: azure/cli@v1
          name: Publish module
          with:
            inlineScript: |
              az bicep publish \
                --target 'br:${{ env.MODULE_REGISTRY_SERVER }}/${{ env.MODULE_NAME }}:${{ env.MODULE_VERSION }}' \
                --file ${{ env.MODULE_FILE_PATH }}
    

    Wenn der Datei-Inhalt anders ist, aktualisieren Sie sie entsprechend diesem Beispiel, und speichern Sie die Datei.

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

    git add .
    git commit -m "Add lint and publish jobs to storage account module workflow"
    git push
    

Auslösen des Workflows

  1. Wechseln Sie in Ihrem Browser zu Ihrem GitHub-Repository, und wählen Sie die Registerkarte Aktionen aus.

  2. Wählen Sie den Workflow module-storage-account aus.

    Beachten Sie, dass eine Workflowausführung bereits ausgeführt wird. Der Pushtrigger wurde ausgelöst, da Sie die Datei metadata.json im Ordner des Moduls geändert haben.

  3. Wählen Sie in der Liste die neueste Ausführung aus.

    Screenshot: GitHub mit Hervorhebung der letzten Ausführung des Modulworkflows

    Warten Sie, bis die Workflowausführung abgeschlossen ist. Das Bicep-Modul wird in Ihrer Containerregistrierung veröffentlicht.

    Beachten Sie die Ausführungsnummer des Workflows, die wahrscheinlich 3 lautet.

Anzeigen des Moduls in der Registrierung

Sie können das veröffentlichte Modul auch im Azure-Portal anzeigen.

  1. Navigieren Sie in Ihrem Browser zum Azure-Portal.

  2. Wechseln Sie zur Ressourcengruppe ToyReusable.

  3. Wählen Sie in Ressourcen die zuvor erstellte Containerregistrierung aus.

  4. Wählen Sie im Menü Dienste>Repositorys aus. Wählen Sie dann das Repository modules\storage-account aus, das das Modul darstellt, das Ihr Workflow veröffentlicht hat.

    Screenshot: Azure-Portal mit Anzeige eines Bicep-Moduls in der Containerregistrierung

    Beachten Sie, dass es ein einzelnes Tag gibt, das der Versionsnummer des Moduls entspricht, das Ihr Workflow veröffentlicht hat. Die Hauptversion (1) und die Nebenversion (2) entsprechen den Versionsnummern, die Sie in der Datei metadata.json definiert haben. Die Revisionsnummer (3) entspricht der Ausführungsnummer des Workflows.

Bereinigen der Ressourcen

Nachdem Sie die Übung abgeschlossen haben, können Sie die Ressourcen entfernen, damit Ihnen dafür keine Gebühren berechnet werden.

Führen Sie im Visual Studio Code-Terminal den folgenden Befehl aus:

az group delete --resource-group ToyReusable --yes --no-wait

Die Ressourcengruppe wird im Hintergrund gelöscht.

Remove-AzResourceGroup -Name ToyReusable -Force

Sie können auch die GitHub-Geheimnisse und das GitHub-Repository sowie die Azure-Workloadidentitäten entfernen.

  • GitHub-Geheimnisse

    1. Wechseln Sie im GitHub-Repository zu Einstellungen>Geheimnisse und Variablen>Aktionen.
    2. Wählen Sie für jedes gespeicherte GitHub-Geheimnis das Symbol Name des Geheimnisses< löschen> und folgen Sie den Aufforderungen.
  • GitHub-Repository

    1. Wechseln Sie zu Einstellungen>Allgemein.
    2. Wählen Sie Dieses Repository löschen aus, und befolgen Sie die Anweisungen.
  • Verbundanmeldeinformationen und Dienstprinzipal der Azure-App-Registrierung.

    1. Suchen Sie auf der Startseite des Portals nach Microsoft Entra-ID, und wählen Sie sie aus der Liste der Dienste aus.
    2. Wechseln Sie zu Verwalten>App-Registrierungen.
    3. Wählen Sie im Tab Anwendungen mit Besitzer die Option toy-reusable aus.
    4. Wählen Sie Löschen aus, und befolgen Sie die Anweisungen.
    5. Wählen Sie den Tab Gelöschte Anwendungen aus.
    6. Wählen Sie toy-reusable aus, wählen Sie Permanent löschen aus, und wählen Sie dann Ja aus, um die App-Registrierung endgültig zu löschen.

    Wichtig

    Doppelte App-Registrierungen und Dienstprinzipalnamen sind möglich. Es wird empfohlen, die ID der Anwendung zu überprüfen, um sicherzustellen, dass Sie die richtige Ressource löschen.