Tutorial: Verwenden von GitHub Actions für die Bereitstellung in App Service und die Verbindungsherstellung mit einer Datenbank

Hier wird beschrieben, wie Sie einen GitHub Actions-Workflow für die Bereitstellung einer ASP.NET Core-Anwendung mit einem Azure SQL-Datenbank-Back-End einrichten. Nach Abschluss verfügen Sie über eine ASP.NET-App, die in Azure ausgeführt wird und mit SQL-Datenbank verbunden ist. Sie verwenden zunächst eine ARM-Vorlage, um Ressourcen zu erstellen.

In diesem Tutorial werden keine Container verwendet. Falls Sie die Bereitstellung in einer containerisierten ASP.NET Core-Anwendung durchführen möchten, helfen Ihnen die Informationen zum Thema Verwenden von GitHub Actions für die Bereitstellung in App Service für Container und die Verbindungsherstellung mit einer Datenbank weiter.

In diesem Tutorial lernen Sie Folgendes:

  • Verwenden eines GitHub Actions-Workflows zum Hinzufügen von Ressourcen zu Azure mit einer ARM-Vorlage (Azure Resource Manager-Vorlage)
  • Verwenden eines GitHub Actions-Workflows zum Erstellen einer ASP.NET Core-Anwendung

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie Folgendes:

  • Ein Azure-Konto mit einem aktiven Abonnement. Sie können kostenlos ein Konto erstellen.
  • Ein GitHub-Konto. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
    • Ein GitHub-Repository, in dem Sie Ihre Resource Manager-Vorlagen und Ihre Workflowdateien speichern können. Informationen zum Erstellen eines neuen Repositorys finden Sie in diesem Hilfeartikel.

Herunterladen des Beispiels

Verzweigen Sie das Beispielprojekt im Repository mit den Azure-Beispielen.

https://github.com/Azure-Samples/dotnetcore-sqldb-ghactions

Ressourcengruppe erstellen

Öffnen Sie Azure Cloud Shell unter https://shell.azure.com. Sie können alternativ die Azure-Befehlszeilenschnittstelle verwenden, wenn Sie sie lokal installiert haben. (Weitere Informationen zu Cloud Shell finden Sie in der Übersicht zu Cloud Shell.)

az group create --name {resource-group-name} --location {resource-group-location}

Generieren von Anmeldeinformationen für die Bereitstellung

OpenID Connect ist eine Authentifizierungsmethode, die kurzlebige Token verwendet. Das Einrichten von OpenID Connect mit GitHub Actions ist komplexer und bietet mehr Sicherheit.

  1. Wenn Sie keine bestehende Anwendung besitzen, registrieren Sie eine neue Microsoft Entra-Anwendung und einen neuen Dienstprinzipal, die auf Ressourcen zugreifen können.

    az ad app create --display-name myApp
    

    Dieser Befehl gibt JSON mit einem appId aus, das Ihrem client-id entspricht. Dies objectId ist APPLICATION-OBJECT-ID und wird zum Erstellen von Verbundanmeldeinformationen mit Graph-API-Anrufen verwendet. Speichern Sie den Wert, der später als AZURE_CLIENT_IDGitHub-Geheimnis verwendet werden soll.

  2. Erstellen eines Dienstprinzipals. Ersetzen Sie $appID durch die AppId aus Ihrer JSON-Ausgabe. Dieser Befehl generiert eine JSON-Ausgabe mit einem anderen objectId, was im nächsten Schritt verwendet wird. Der neue objectId ist der assignee-object-id.

    Dieser Befehl generiert eine JSON-Ausgabe mit einem anderen objectId und wird im nächsten Schritt verwendet. Der neue objectId ist der assignee-object-id.

    Kopieren Sie die appOwnerTenantId, um sie später als GitHub-Geheimnis für AZURE_TENANT_ID zu verwenden.

     az ad sp create --id $appId
    
  3. Erstellen Sie eine neue Rollenzuweisung nach Abonnement und Objekt. Standardmäßig ist die Rollenzuweisung an Ihr Standardabonnement gebunden. Ersetzen Sie $subscriptionId durch Ihre Abonnement-ID, $resourceGroupName durch den Namen Ihrer Ressourcengruppe und $assigneeObjectId durch die generierte assignee-object-id (die neu erstellte Dienstprinzipalobjekt-ID).

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
    
  4. Führen Sie den folgenden Befehl aus, um neue Anmeldeinformationen für die Verbundidentität für Ihre Microsoft Entra-Anwendung zu erstellen.

    • Ersetzen Sie APPLICATION-OBJECT-ID durch die ObjectId (die beim Erstellen der Anwendung generiert wurde) für Ihre Microsoft Entra-Anwendung.
    • Legen Sie einen Wert für CREDENTIAL-NAME fest, um später auf ihn zu verweisen.
    • Legen Sie die subject fest. Dieser Wert wird von GitHub in Abhängigkeit von Ihrem Workflow festgelegt:
      • Aufträge in Ihrer GitHub Actions-Umgebung: repo:< Organization/Repository >:environment:< Name >
      • Bei Aufträgen, die nicht an eine Umgebung gebunden sind, fügen Sie den Referenzpfad für den Branch/Tag auf der Grundlage des für die Auslösung des Workflows verwendeten Referenzpfads ein: repo:< Organization/Repository >:ref:< ref path>. Zum Beispiel: repo:n-username/ node_express:ref:refs/heads/my-branch oder repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Für Workflows, die durch ein Pull Request-Ereignis ausgelöst werden: repo:< Organization/Repository >:pull_request.
    az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
    ("credential.json" contains the following content)
    {
        "name": "<CREDENTIAL-NAME>",
        "issuer": "https://token.actions.githubusercontent.com",
        "subject": "repo:octo-org/octo-repo:environment:Production",
        "description": "Testing",
        "audiences": [
            "api://AzureADTokenExchange"
        ]
    }
    

Informationen zum Erstellen einer Active Directory-Anwendung, eines Dienstprinzipals und von Verbundanmeldeinformationen über das Azure-Portal finden Sie unter Verbinden von GitHub und Azure.

Konfigurieren des GitHub-Geheimnisses für die Authentifizierung

Sie müssen die Client-ID Ihrer Anwendung, die Mandanten-ID und die Abonnement-ID für die Anmeldeaktion bereitstellen. Diese Werte können entweder direkt im Workflow bereitgestellt werden oder in GitHub-Geheimnissen gespeichert und darauf in Ihrem Workflow verwiesen werden. Das Speichern der Werte als GitHub-Geheimnisse ist die sicherere Option.

  1. Wechseln Sie in GitHub zu Ihrem Repository.

  2. Gehen Sie im Navigationsmenü auf Einstellungen.

  3. Wählen Sie Security > Secrets and variables > Actions (Sicherheit > Geheimnisse und Variablen > Aktionen) aus.

    Screenshot des Hinzufügens eines Geheimnisses

  4. Wählen Sie New repository secret (Neues Repositorygeheimnis) aus.

  5. Erstellen Sie Geheimnisse für AZURE_CLIENT_ID, AZURE_TENANT_ID und AZURE_SUBSCRIPTION_ID. Verwenden Sie diese Werte aus Ihrer Microsoft Entra-Anwendung für Ihre GitHub-Geheimnisse:

    GitHub-Geheimnis Microsoft Entra-Anwendung
    AZURE_CLIENT_ID Anwendungs-ID (Client)
    AZURE_TENANT_ID Verzeichnis-ID (Mandant)
    AZURE_SUBSCRIPTION_ID Abonnement-ID
  6. Speichern Sie jedes Geheimnis, indem Sie Geheimnis hinzufügen auswählen.

Hinzufügen von GitHub-Geheimnissen für Ihren Build

  1. Erstellen Sie in Ihrem GitHub-Repository für SQLADMIN_PASS und SQLADMIN_LOGINzwei neue Geheimnisse. Achten Sie darauf, dass Sie ein komplexes Kennwort auswählen. Andernfalls tritt beim Erstellungsschritt für den SQL-Datenbank-Server ein Fehler auf. Sie können nicht noch einmal auf dieses Kennwort zugreifen. Speichern Sie es daher separat.

  2. Erstellen Sie ein Geheimnis vom Typ AZURE_SUBSCRIPTION_ID für Ihre Azure-Abonnement-ID. Falls Sie Ihre Abonnement-ID nicht kennen, können Sie diesen Befehl in der Azure Shell verwenden, um sie zu ermitteln. Kopieren Sie den Wert in der Spalte SubscriptionId.

    az account list -o table
    

Erstellen von Azure-Ressourcen

Der Workflow zum Erstellen von Azure-Ressourcen führt eine ARM-Vorlage aus, um Ressourcen in Azure bereitzustellen. Der Workflow:

So führen Sie den Workflow zum Erstellen von Azure-Ressourcen aus:

  1. Öffnen Sie die Datei infraworkflow.yml in .github/workflows in Ihrem Repository.

  2. Aktualisieren Sie den Wert von AZURE_RESOURCE_GROUP auf den Namen Ihrer Ressourcengruppe.

  3. Legen Sie die Eingabe für region in Ihren Aktionen für die ARM-Bereitstellung auf Ihre Region fest.

    1. Öffnen Sie templates/azuredeploy.resourcegroup.parameters.json, und aktualisieren Sie die EigenschaftrgLocation, indem Sie Ihre Region angeben.
  4. Navigieren Sie zu Aktionen, und wählen Sie Workflow ausführen aus.

    Führen Sie den GitHub Actions-Workflow aus, um Ressourcen hinzuzufügen.

  5. Vergewissern Sie sich, dass Ihrer Aktion erfolgreich ausgeführt wurde, indem Sie auf der Seite Aktionen nach einem grünen Häkchen suchen.

    Erfolgreiche Ausführung von „Ressourcen erstellen“.

  6. Navigieren Sie nach der Erstellung Ihrer Ressourcen zu Aktionen, wählen Sie die Option „Azure-Ressourcen erstellen“ aus, und deaktivieren Sie den Workflow.

    Deaktivieren des Workflows „Azure-Ressourcen erstellen“

Erstellen eines Geheimnisses für ein Veröffentlichungsprofil

  1. Öffnen Sie im Azure-Portal Ihren neuen App Service-Stagingslot, der über den Workflow Create Azure Resources erstellt wurde.

  2. Wählen Sie Veröffentlichungsprofil abrufen aus.

  3. Öffnen Sie die Veröffentlichungsprofildatei in einem Text-Editor, und kopieren Sie ihren Inhalt.

  4. Erstellen Sie ein neues GitHub-Geheimnis für AZURE_WEBAPP_PUBLISH_PROFILE.

Erstellen und Bereitstellen Ihrer App

Gehen Sie wie folgt vor, um den Workflow zu erstellen und bereitzustellen:

  1. Öffnen Sie Ihre workflow.yaml-Datei in .github/workflows in Ihrem Repository.

  2. Überprüfen Sie, ob die Umgebungsvariablen für AZURE_RESOURCE_GROUP, AZURE_WEBAPP_NAME, SQLSERVER_NAME und DATABASE_NAME mit denen in infraworkflow.yml übereinstimmen.

  3. Überprüfen Sie die erfolgreiche Bereitstellung Ihrer App, indem Sie auf die URL zugreifen, die in der Ausgabe für den Wechsel zum Produktionsslot angegeben ist. Die Beispiel-App „My TodoList“ sollte angezeigt werden.

Bereinigen von Ressourcen

Wenn Sie Ihr Beispielprojekt nicht mehr benötigen, sollten Sie Ihre Ressourcengruppe im Azure-Portal und Ihr Repository auf GitHub löschen.

Nächste Schritte