Ü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 eine Pipeline 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 der Pipeline eine Lintphase hinzu.
  • Fügen Sie eine Pipelinephase hinzu, um das Modul in Ihrer Registrierung zu veröffentlichen.
  • Stellen Sie sicher, dass Ihre Pipeline 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. Wählen Sie unter SKU die Option Basic aus.

    Ä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. Vergewissern Sie sich, dass für die Einstellungen Überprüfung erfolgreich angezeigt wird, und wählen Sie dann 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. Sie wird yourregistryname.azurecr.io ähnlich sein.

    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 Lerneinheit haben Sie gelernt, wie wichtig es ist, eine Strategie für die Versionsverwaltung Ihrer Module zu haben. Sie haben auch gelernt, wie Sie Modulmetadatendateien verwenden können, um die Haupt- und Nebenversionsnummer Ihres Moduls innerhalb einer Pipeline 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 von Visual Studio Code mit angezeigtem Speicherort 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. Ihre Pipeline kombiniert diese Zahlen zusammen mit der Buildnummer der Pipeline bei jeder Pipelineausführung in einer vollständigen Versionsnummer.

  4. Speichern Sie die geänderte Datei.

Aktualisieren der Pipelinedefinition und Hinzufügen einer Lintphase

Ihr Repository enthält einen Entwurf einer Pipeline, die Sie als Startpunkt verwenden können.

  1. Öffnen Sie die pipeline.yml-Datei im Ordner modules/storage-account.

  2. Aktualisieren Sie den Wert der Umgebungsvariablen ModuleRegistryServer 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 er wie folgt aus:

    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    
  3. Am unteren Rand der Datei für den Kommentar # To be added mit der folgenden Definition für die Lintphase:

    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    

Hinzufügen einer Veröffentlichungsstufe zur Pipeline

Jetzt können Sie eine zweite Phase zum Veröffentlichen des Moduls in Ihre Containerregistrierung hinzufügen.

  1. Definieren Sie unten in der Datei pipeline.yml die Veröffentlichungsphase, und fügen Sie einen Schritt hinzu, um die Versionsnummer aus der metadata.json-Datei Ihres Moduls zu lesen und als Pipelinevariable festzulegen.

    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
    

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

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

    - task: AzureCLI@2
      name: Publish
      displayName: Publish module
      inputs:
        azureSubscription: $(ServiceConnectionName)
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az bicep publish \
            --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
            --file $(ModuleFilePath)
    

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

  3. Speichern Sie die geänderte Datei.

Überprüfen und Committen Ihrer Pipelinedefinition

  1. Stellen Sie sicher, dass die Datei storage_account_module.yml wie im folgenden Beispiel aussieht:

    trigger:
      batch: true
      branches:
        include:
        - main
      paths:
        include:
        - 'modules/storage-account/**'
    
    variables: 
    - name: ServiceConnectionName
      value: ToyReusable
    - name: ModuleName
      value: storage-account
    - name: ModuleRegistryServer
      value: yourregistryname.azurecr.io
    - name: ModuleFilePath
      value: modules/storage-account/main.bicep
    - name: ModuleMetadataFilePath
      value: modules/storage-account/metadata.json
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    
    - stage: Lint
      jobs:
      - job: LintCode
        displayName: Lint code
        steps:
          - script: |
              az bicep build --file $(ModuleFilePath)
            name: LintBicepCode
            displayName: Run Bicep linter
    
    - stage: Publish
      jobs:
      - job: Publish
        steps:
          - script: |
              majorMinorVersionNumber=$(jq '(.version.major | tostring) + "." + (.version.minor | tostring)' $(ModuleMetadataFilePath) -r )
              versionNumber="$majorMinorVersionNumber.$(Build.BuildNumber)"
              echo "##vso[task.setvariable variable=ModuleVersion;]$versionNumber"
            name: GetModuleVersionNumber
            displayName: Get module version number
          - task: AzureCLI@2
            name: Publish
            displayName: Publish module
            inputs:
              azureSubscription: $(ServiceConnectionName)
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az bicep publish \
                  --target 'br:$(ModuleRegistryServer)/$(ModuleName):$(ModuleVersion)' \
                  --file $(ModuleFilePath)
    

    Falls nicht, aktualisieren Sie sie entsprechend diesem Beispiel und speichern sie.

  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 stages to storage account module pipeline"
    git push
    

    Unmittelbar nach dem Pushen startet Azure Pipelines eine neue Pipelineausführung.

Überwachen der Pipeline

  1. Wählen Sie in Ihrem Browser Pipelines>Pipelines aus.

  2. Wählen Sie die aktive Pipelineausführung aus.

  3. Die Pipelineausführung wird angezeigt.

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

  4. Notieren Sie die Buildnummer der Pipeline, die das heutige Datum und eine eindeutige Revisionsnummer enthält.

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 die zuvor erstellte Containerregistrierung aus.

  4. Wählen Sie den Bereich Repositorys aus dem Menü aus. Wählen Sie dann das Repository modules\storage-account aus, das das Modul darstellt, das Ihre Pipeline 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 Ihre Pipeline veröffentlicht hat. Die Hauptversion (1) und die Nebenversion (2) entsprechen den Versionsnummern, die Sie in der Datei metadata.json definiert haben. Die Revisionsnummer (20230407.3) entspricht der Buildnummer der Pipeline.

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 Dienstverbindung und das Azure DevOps-Projekt entfernen.

  • Dienstverbindung

    1. Wählen Sie im Azure DevOps-Projekt Projekteinstellungen>Dienstverbindungen aus.
    2. Wählen Sie ToyReusable aus.
    3. Wählen Sie in der oberen rechten Ecke die drei Punkte für Weitere Aktionen aus.
    4. Wählen Sie Löschen aus, und bestätigen Sie den Löschvorgang.
  • 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 unter Gelöschte Anwendungen die Option toy-reusable aus.
    4. Wählen Sie Endgültig löschen aus, und folgen Sie den Eingabeaufforderungen.
  • Azure DevOps-Projekt

    1. Wählen Sie im Azure DevOps-Projekt Projekteinstellungen>Übersicht aus.
    2. Wählen Sie unter Projekt löschen die Option Löschen aus.
    3. Geben Sie den Projektnamen ein, und bestätigen Sie den Löschvorgang.