Übung: Bereitstellen von ARM-Vorlagen im Rahmen Ihrer CI/CD-Bemühungen mit GitHub Actions

Abgeschlossen

Hier stellen Sie eine Azure Resource Manager-Vorlage (ARM) aus einem GitHub Actions-Workflow bereit.

Wichtig

Diese Übung führen Sie außerhalb der Microsoft Learn-Umgebung durch. Für diese Übung benötigen Sie ein eigenes Azure-Abonnement. Außerdem können Gebühren anfallen. Dies ist erforderlich, da Sie einen Dienstprinzipal erstellen müssen, was im Sandboxabonnement nicht unterstützt wird. Wenn Sie noch kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

Erstellen Ihres GitHub-Kontos und -Repositorys

Wenn Sie noch kein GitHub-Konto besitzen, müssen Sie zuerst eines über die GitHub-Kontoerstellungsseite erstellen. (Dies ist kostenlos.)

Screenshot: GitHub-Kontoerstellungsseite

Nachdem Sie ein Konto erstellt haben, melden Sie sich an, und erstellen Sie ein neues Repository, in dem Sie Ihre Vorlagen im Rahmen des IaC-Modells (Infrastructure-as-Code, Infrastruktur als Code) speichern können. Führen Sie die folgenden Schritte aus, um das Repository (in der Branche auch Repo genannt) zu erstellen:

  1. Verwenden Sie in der oberen rechten Ecke einer beliebigen Seite auf der GitHub-Website das Dropdownmenü +, und wählen Sie dann New Repository (Neues Repository) aus. Alternativ können Sie auf die grüne Schaltfläche Create repository (Repository erstellen) klicken, wenn diese angezeigt wird.

    Screenshot: Auswahl zum Erstellen eines GitHub-Repositorys

  2. Geben Sie einen kurzen, einprägsamen Namen für das Repository ein. Beispielsweise können Sie Deploy-ARM-Template verwenden. Fügen Sie optional eine Beschreibung Ihres Repositorys hinzu. Zum Beispiel: Bereitstellung meiner ersten ARM-Vorlage mit GitHub Actions.

  3. Wählen Sie eine Einstellung für die Sichtbarkeit des Repositorys aus. Öffentliche Repositorys sind für alle Benutzer im Internet zugänglich. Private Repositorys sind nur für Sie zugänglich sowie für Personen, für die Sie den Zugriff explizit freigeben. (Beides funktioniert in dieser Übung.)

  4. Wählen Sie unter Initialize this repository with: (Dieses Repository initialisieren mit:) die Option README-Datei hinzufügen aus.

  5. Klicken Sie auf Create repository (Repository erstellen).

    Screenshot: Informationen zur Erstellung des neuen Repositorys

Sie haben Ihr Repository erstellt und mit einer README-Datei initialisiert. Es ist an der Zeit, eine Vorlage und eine Vorlagenparameterdatei in das Repository zu committen.

Hinweis

README-Dateien sind ein guter Ort, um Ihr Projekt ausführlicher zu beschreiben, oder Sie können Dokumentation zum Installieren oder Verwenden Ihres Projekts hinzufügen. Der Inhalt Ihrer README-Datei wird automatisch auf der Hauptseite Ihres Repositorys angezeigt.

Committen einer ARM-Vorlagendatei in das Repository

  1. Navigieren Sie auf GitHub zur Hauptseite des Repositorys.

  2. Wählen Sie über der Liste der Dateien in der Dropdownliste Add file (Datei hinzufügen) die Option Create new file (Neue Datei erstellen) aus.

    Screenshot: Auswahl zum Hinzufügen einer Vorlage zum Repository

  3. Geben Sie im Feld „File name“(Dateiname) den Namen und die Erweiterung für die Vorlage ein. Verwenden Sie für diese Übung den Namen azuredeploy.json. Kopieren Sie die folgende Vorlage, und fügen Sie sie in Ihre neue GitHub-Datei ein.

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "VnetName": {
                "type": "string",
                "defaultValue": "VNet-001",
                "metadata": {
                    "description": "Virtual Network Name"
                }
            },
            "CostCenterIO": {
                "type": "string",
                "defaultValue": "12345",
                "metadata": {
                    "description": "Cost Center IO number for cross billing"
                }
            },
            "OwnerName": {
                "type": "string",
                "defaultValue": "John Smith",
                "metadata": {
                    "description": "Name of the stakeholder responsible for this resource"
                }
            }
        },
        "variables": {},
        "resources": [
            {
                "apiVersion": "2018-10-01",
                "type": "Microsoft.Network/virtualNetworks",
                "name": "[parameters('VnetName')]",
                "location": "[resourceGroup().location]",
                "tags": {
                    "CostCenter": "[parameters('CostCenterIO')]",
                    "Owner": "[parameters('OwnerName')]"
                },
                "properties": {
                    "addressSpace": {
                        "addressPrefixes": [
                            "10.0.0.0/16"
                        ]
                    },
                    "enableVmProtection": false,
                    "enableDdosProtection": false,
                    "subnets": [
                        {
                            "name": "subnet001",
                            "properties": {
                                "addressPrefix": "10.0.0.0/24"
                            }
                        },
                        {
                            "name": "subnet002",
                            "properties": {
                                "addressPrefix": "10.0.1.0/24"
                            }
                        }
                    ]
                }
            }
        ]
    }
    
  4. Fügen Sie im Abschnitt Commit new file (Neue Datei committen) eine Beschreibung ein, und klicken Sie dann auf Commit New File (Neue Datei committen), um sie in Ihrem Repository zu speichern.

    Screenshot: Speichern der neuen Vorlage im Repository

Konfigurieren der Authentifizierung zwischen GitHub Actions und Ihrem Azure-Abonnement

Zum Bereitstellen von Ressourcen in Azure mithilfe von GitHub Actions müssen Sie einen Azure-Dienstprinzipal erstellen und diesem Berechtigungen zum Erstellen von Ressourcen gewähren, die in Ihren Vorlagen definiert sind. Sie führen diesen Schritt im Abschnitt „Azure Cloud Shell“ des Azure-Portals aus, sobald Sie bei Ihrem Abonnement angemeldet sind.

Erstellen des Dienstprinzipals

Damit der Prinzipal eines GitHub Actions-Workflows Azure-Ressourcen bereitstellen kann, benötigt er den richtigen integrierten Mitwirkenden.

Das folgende Azure CLI-Skript zeigt, wie Sie einen Azure-Dienstprinzipal mit Berechtigungen der Rolle „Mitwirkender“ für eine Azure-Ressourcengruppe generieren können. In dieser Ressourcengruppe werden vom Workflow die in der ARM-Vorlage definierten Ressourcen bereitgestellt.

projectName="GitHubActionExercise"
location="eastus"
resourceGroupName="${projectName}-rg"
appName="http://${projectName}"

# Create the resource group
az group create --name $resourceGroupName --location $location

# Store the resource group ID in a variable
scope=$(az group list --query "[?contains(name, '$resourceGroupName')].id" -o tsv)

# Create the service principal with contributor rights to the resource group we just created
az ad sp create-for-rbac --name $appName --role Contributor --scopes $scope --sdk-auth

Klicken Sie, während Sie bei Ihrem Abonnement angemeldet sind, im Portal auf das Cloud Shell-Symbol, um die Shell unten auf der Seite zu öffnen.

Animation des Öffnens von Cloud Shell

Verwenden Sie in der Shell den obigen Code zum Erstellen des Dienstprinzipals. Dadurch erhalten Sie die folgenden Ergebnisse. Kopieren Sie den JSON-Teil der Ergebnisse (den Inhalt im roten Feld des folgenden Screenshots), da Sie ihn benötigen, wenn Sie das Geheimnis in GitHub konfigurieren.

Screenshot: Ergebnisse des Erstellens eines Dienstprinzipals in Azure

Kopieren Sie die JSON-Ausgabe und speichern Sie sie als GitHub-Geheimnis in Ihrem GitHub-Repository, indem Sie die folgenden Schritte in GitHub ausführen: Klicken Sie in Ihrem GitHub-Repository auf die Registerkarte Einstellungen. Wählen Sie im linken Menü die Dropdownliste Geheimnisse aus, und wählen Sie dann Codespaces aus.

Geben Sie die folgenden Werte ein, und klicken Sie dann auf Add secret (Geheimnis hinzufügen):

  • Name: Geben Sie AZURE_CREDENTIALS ein.
  • Geheimnis: Fügen Sie die zuvor kopierte JSON-Ausgabe ein.

Screenshot: Hinzufügen von Geheimnisinformationen eines neuen Dienstprinzipals zu einem GitHub-Geheimnis

Sie benötigen diese Information, um die Authentifizierung im Workflow anzugeben.

Erstellen eines Workflows

Die Workflowdatei muss am Repositorystamm im Ordner .github/workflows gespeichert werden. Die Erweiterung der Workflowdatei kann entweder .yml oder .yaml lauten.

Sie können eine Workflowdatei erstellen und dann an das Repository pushen bzw. in dieses hochladen. Alternativ können Sie das folgende Verfahren verwenden, um sie über die GitHub-Benutzeroberfläche zu erstellen:

  1. Klicken Sie in Ihrem GitHub-Repository im oberen Menü auf Actions (Aktionen), und wählen Sie dann Set up a workflow yourself (Workflow selbst einrichten) aus.

    Screenshot: Auswahl zum Einrichten eines Workflows

  2. Benennen Sie die Workflowdatei um, wenn Sie einen anderen Namen anstelle von „main.yml“ bevorzugen. Sie können beispielsweise deployARMTemplate.yml verwenden.

  3. Ersetzen Sie den Inhalt der YML-Datei durch folgenden Code.

    Hinweis

    GitHub Marketplace bietet benutzerdefinierte Aktionen, die Sie zum Bereitstellen von ARM-Vorlagen verwenden können. Dieses Modul verwendet den Marketplace-Anbieter mit dem Namen Bereitstellen einer ARM-Vorlage.

    name: Deploy ARM Template
    
    on:
      push:
        branches:
          - main
    env:
      AZURE_SUBSCRIPTION_ID: << Subscription Id >>   # set this to your Azure Subscription Id
      AZURE_RESOURCE_GROUP: GitHubActionExercise-rg   # set this to your target resource group
    
    jobs:
      deploy-virtual-network-template:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code
            uses: actions/checkout@main
    
          - name: Login to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Deploy ARM Template
            uses: azure/arm-deploy@v1
            with:
              scope: resourcegroup
              subscriptionId: ${{ env.AZURE_SUBSCRIPTION_ID }}
              resourceGroupName: ${{ env.AZURE_RESOURCE_GROUP }}
              template: ./azuredeploy.json
    

    Die Workflowdatei besteht aus drei Abschnitten.

    • name: Der Name des Workflows.

    • on: Der Name des GitHub-Ereignisses, das den Workflow auslöst. Der Workflow wird ausgelöst, wenn ein Pushereignis für den Mainbranch auftritt und mindestens eine Datei im Mainbranch ändert.

    • jobs: Eine Workflowausführung besteht aus mindestens einem Auftrag. Nur ein Auftrag heißt deploy-virtual-network-template. Dieser Auftrag umfasst drei Schritte.

      1. Sehen Sie sich den Quellcode an.
      2. Melden Sie sich bei Azure an.
      3. Stellen Sie die ARM-Vorlage bereit.

    Wichtig

    Überprüfen Sie, ob der Geheimnisname im Ausdruck creds: ${{ secrets.AZURE_CREDENTIALS }} mit dem Namen des Geheimnisses übereinstimmt, das Sie in den Einstellungen Ihres Repositorys gespeichert haben. Stellen Sie außerdem sicher, dass der Name der ARM-Vorlage (template: $GITHUB_WORKSPACE/azuredeploy.json) im Schritt Deploy ARM Template mit dem Namen übereinstimmt, den Sie zuvor im Repository gespeichert haben.

    Hinweis

    Der Name der Ressourcengruppe sollte GitHubActionExercise-rg lauten, wenn Sie den vorangehenden Azure CLI-Code beim Konfigurieren der Anmeldeinformationen für die Bereitstellung verwendet haben. Der Name der generierten Ressourcengruppe entspricht dem Projektnamen mit rg angefügt.

  4. Klicken Sie auf Start commit (Commit starten). Fügen Sie bei Bedarf einen Kommentar und eine Beschreibung hinzu.

  5. Stellen Sie sicher, dass Sie Commit directly to the main branch (Direkt im Mainbranch committen) ausgewählt haben, und klicken Sie dann auf Commit new file (Neue Datei committen) oder auf Commit changes (Änderungen committen).

    Screenshot: Committen eines Workflows an den  Masterbranch.

    Nachdem die Workflowdatei erstellt und an den Mainbranch des Repositorys committet wurde, wird der Workflow automatisch gestartet, da der Trigger im Workflow ein Commit-/Pushvorgang in den Mainbranch ist.

    on:
      push:
        branches:
          - main
    
  6. Navigieren Sie zu Ihrem Repository, und überprüfen Sie den Status Ihres Workflows.

    Screenshot: Workflowstatus

Überprüfen Ihrer Bereitstellung

Wenn der Workflow abgeschlossen ist, rufen Sie das Azure-Portal auf, um den Bereitstellungsstatus zu überprüfen.

Klicken Sie im linken Bereich auf Ressourcengruppen>GitHubActionExercise-rg. Überprüfen Sie im Bereich Bereitstellungen, ob Ihre Bereitstellung erfolgreich durchgeführt wurde.

Screenshot: Bereitstellungsstatus