Übung: Bereitstellen von ARM-Vorlagen im Rahmen Ihrer CI/CD-Bemühungen mit GitHub Actions
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.)
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:
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.
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.
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.)
Wählen Sie unter Initialize this repository with: (Dieses Repository initialisieren mit:) die Option README-Datei hinzufügen aus.
Klicken Sie auf Create repository (Repository erstellen).
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
Navigieren Sie auf GitHub zur Hauptseite des Repositorys.
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.
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" } } ] } } ] }
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.
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.
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.
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.
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:
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.
Benennen Sie die Workflowdatei um, wenn Sie einen anderen Namen anstelle von „main.yml“ bevorzugen. Sie können beispielsweise deployARMTemplate.yml verwenden.
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ßtdeploy-virtual-network-template
. Dieser Auftrag umfasst drei Schritte.- Sehen Sie sich den Quellcode an.
- Melden Sie sich bei Azure an.
- 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 SchrittDeploy 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 mitrg
angefügt.Klicken Sie auf Start commit (Commit starten). Fügen Sie bei Bedarf einen Kommentar und eine Beschreibung hinzu.
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).
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
Navigieren Sie zu Ihrem Repository, und überprüfen Sie den Status Ihres Workflows.
Ü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.