Übung: Veröffentlichen eines Moduls in einer Registrierung
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.
Erstellen Sie in Ihrem Browser im Azure-Portal eine neue Containerregistrierung.
Wählen Sie auf der Registerkarte Grundlagen das Zielabonnement und die zuvor erstellte Ressourcengruppe ToyReusable aus.
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.
Um den Tarif zu sehen, wählen Sie Basic.
Ändern Sie die Standardwerte der anderen Konfigurationseinstellungen nicht.
Klicken Sie auf Überprüfen + erstellen.
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).
Wenn die Nachricht Bereitstellung erfolgreich angezeigt wird, wählen Sie Zu Ressource wechseln aus, um die Containerregistrierung zu öffnen.
Notieren Sie sich den Wert der Einstellung Anmeldeserver, die im Bereich Übersicht der Containerregistrierung angezeigt wird. Der Name ähnelt
yourregistryname.azurecr.io
.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.
Erweitern Sie in Visual Studio Code den Ordner modules/storage-account im Stammverzeichnis Ihres Repositorys.
Erstellen Sie eine neue Datei mit dem Namen metadata.json.
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.
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.
Erweitern Sie in Visual Studio Code den Ordner .github/workflows im Stammverzeichnis des Repositorys.
Öffnen Sie die Datei module-storage-account.yml.
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
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.
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.
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.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.Speichern Sie die geänderte Datei.
Überprüfen und Committen Ihrer Workflowdefinition
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.
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
Wechseln Sie in Ihrem Browser zu Ihrem GitHub-Repository, und wählen Sie die Registerkarte Aktionen aus.
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.
Wählen Sie in der Liste die neueste Ausführung aus.
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.
Navigieren Sie in Ihrem Browser zum Azure-Portal.
Wechseln Sie zur Ressourcengruppe ToyReusable.
Wählen Sie in Ressourcen die zuvor erstellte Containerregistrierung aus.
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.
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
- Wechseln Sie im GitHub-Repository zu Einstellungen>Geheimnisse und Variablen>Aktionen.
- Wählen Sie für jedes gespeicherte GitHub-Geheimnis das Symbol Name des Geheimnisses< löschen> und folgen Sie den Aufforderungen.
GitHub-Repository
- Wechseln Sie zu Einstellungen>Allgemein.
- Wählen Sie Dieses Repository löschen aus, und befolgen Sie die Anweisungen.
Verbundanmeldeinformationen und Dienstprinzipal der Azure-App-Registrierung.
- Suchen Sie auf der Startseite des Portals nach Microsoft Entra-ID, und wählen Sie sie aus der Liste der Dienste aus.
- Wechseln Sie zu Verwalten>App-Registrierungen.
- Wählen Sie im Tab Anwendungen mit Besitzer die Option toy-reusable aus.
- Wählen Sie Löschen aus, und befolgen Sie die Anweisungen.
- Wählen Sie den Tab Gelöschte Anwendungen aus.
- 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.