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.
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 Ihremclient-id
entspricht. DiesobjectId
istAPPLICATION-OBJECT-ID
und wird zum Erstellen von Verbundanmeldeinformationen mit Graph-API-Anrufen verwendet. Speichern Sie den Wert, der später alsAZURE_CLIENT_ID
GitHub-Geheimnis verwendet werden soll.Erstellen eines Dienstprinzipals. Ersetzen Sie
$appID
durch die AppId aus Ihrer JSON-Ausgabe. Dieser Befehl generiert eine JSON-Ausgabe mit einem anderenobjectId
, was im nächsten Schritt verwendet wird. Der neueobjectId
ist derassignee-object-id
.Dieser Befehl generiert eine JSON-Ausgabe mit einem anderen
objectId
und wird im nächsten Schritt verwendet. Der neueobjectId
ist derassignee-object-id
.Kopieren Sie die
appOwnerTenantId
, um sie später als GitHub-Geheimnis fürAZURE_TENANT_ID
zu verwenden.az ad sp create --id $appId
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 generierteassignee-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
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
oderrepo: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
.
- Aufträge in Ihrer GitHub Actions-Umgebung:
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" ] }
- Ersetzen Sie
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.
Wechseln Sie in GitHub zu Ihrem Repository.
Gehen Sie im Navigationsmenü auf Einstellungen.
Wählen Sie Security > Secrets and variables > Actions (Sicherheit > Geheimnisse und Variablen > Aktionen) aus.
Wählen Sie New repository secret (Neues Repositorygeheimnis) aus.
Erstellen Sie Geheimnisse für
AZURE_CLIENT_ID
,AZURE_TENANT_ID
undAZURE_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 Speichern Sie jedes Geheimnis, indem Sie Geheimnis hinzufügen auswählen.
Hinzufügen von GitHub-Geheimnissen für Ihren Build
Erstellen Sie in Ihrem GitHub-Repository für
SQLADMIN_PASS
undSQLADMIN_LOGIN
zwei 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.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 SpalteSubscriptionId
.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:
- Checkt den Quellcode mithilfe der Check-Out-Aktion aus.
- Meldet sich mit der Azure-Anmeldeaktion bei Azure an und sammelt Umgebungs- und Azure-Ressourceninformationen.
- Stellt Ressourcen mit der Aktion „Bereitstellen“ aus Azure Resource Manager bereit.
So führen Sie den Workflow zum Erstellen von Azure-Ressourcen aus:
Öffnen Sie die Datei
infraworkflow.yml
in.github/workflows
in Ihrem Repository.Aktualisieren Sie den Wert von
AZURE_RESOURCE_GROUP
auf den Namen Ihrer Ressourcengruppe.Legen Sie die Eingabe für
region
in Ihren Aktionen für die ARM-Bereitstellung auf Ihre Region fest.- Öffnen Sie
templates/azuredeploy.resourcegroup.parameters.json
, und aktualisieren Sie die EigenschaftrgLocation
, indem Sie Ihre Region angeben.
- Öffnen Sie
Navigieren Sie zu Aktionen, und wählen Sie Workflow ausführen aus.
Vergewissern Sie sich, dass Ihrer Aktion erfolgreich ausgeführt wurde, indem Sie auf der Seite Aktionen nach einem grünen Häkchen suchen.
Navigieren Sie nach der Erstellung Ihrer Ressourcen zu Aktionen, wählen Sie die Option „Azure-Ressourcen erstellen“ aus, und deaktivieren Sie den Workflow.
Erstellen eines Geheimnisses für ein Veröffentlichungsprofil
Öffnen Sie im Azure-Portal Ihren neuen App Service-Stagingslot, der über den Workflow
Create Azure Resources
erstellt wurde.Wählen Sie Veröffentlichungsprofil abrufen aus.
Öffnen Sie die Veröffentlichungsprofildatei in einem Text-Editor, und kopieren Sie ihren Inhalt.
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:
Öffnen Sie Ihre
workflow.yaml
-Datei in.github/workflows
in Ihrem Repository.Überprüfen Sie, ob die Umgebungsvariablen für
AZURE_RESOURCE_GROUP
,AZURE_WEBAPP_NAME
,SQLSERVER_NAME
undDATABASE_NAME
mit denen ininfraworkflow.yml
übereinstimmen.Ü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.