Självstudie: Använda GitHub Actions för att distribuera till App Service och ansluta till en databas
Lär dig hur du konfigurerar ett GitHub Actions-arbetsflöde för att distribuera ett ASP.NET Core-program med en Azure SQL Database-serverdel . När du är klar har du en ASP.NET app som körs i Azure och är ansluten till SQL Database. Du använder först en ARM-mall för att skapa resurser.
Den här självstudien använder inte containrar. Om du vill distribuera till ett containerbaserat ASP.NET Core-program läser du Använda GitHub Actions för att distribuera till App Service för containrar och ansluta till en databas.
I den här självstudien lär du dig att:
- Använda ett GitHub Actions-arbetsflöde för att lägga till resurser i Azure med en Azure Resource Manager-mall (ARM-mall)
- Använda ett GitHub Actions-arbetsflöde för att skapa ett ASP.NET Core-program
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
För att slutföra den här självstudien behöver du:
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Ett GitHub-konto. Om du inte har ett sådant kan du registrera dig utan kostnad.
- En GitHub-lagringsplats för att lagra dina Resource Manager-mallar och dina arbetsflödesfiler. Information om hur du skapar en finns i Skapa en ny lagringsplats.
Hämta exemplet
Förgrena exempelprojektet i Azure Samples-lagringsplatsen.
https://github.com/Azure-Samples/dotnetcore-sqldb-ghactions
Skapa resursgruppen
Öppna Azure Cloud Shell på https://shell.azure.com. Du kan också använda Azure CLI om du har installerat det lokalt. (Mer information om Cloud Shell finns i Översikt över Cloud Shell.)
az group create --name {resource-group-name} --location {resource-group-location}
Generera autentiseringsuppgifter för distribution
OpenID Connect är en autentiseringsmetod som använder kortlivade token. Att konfigurera OpenID Connect med GitHub Actions är en mer komplex process som ger förstärkt säkerhet.
Om du inte har ett befintligt program registrerar du ett nytt Microsoft Entra-ID-program och tjänstens huvudnamn som kan komma åt resurser.
az ad app create --display-name myApp
Det här kommandot matar ut JSON med en
appId
som är dinclient-id
. isid
APPLICATION-OBJECT-ID
och används för att skapa federerade autentiseringsuppgifter med Graph API-anrop. Spara värdet som ska användas somAZURE_CLIENT_ID
GitHub-hemlighet senare.Skapa ett huvudnamn för tjänsten.
$appID
Ersätt med appId från dina JSON-utdata.Det här kommandot genererar JSON-utdata med tjänstens huvudnamn
id
. Tjänstens huvudnamnid
används som värdet för--assignee-object-id
argumentet iaz role assignment create
kommandot i nästa steg.appOwnerOrganizationId
Kopiera från JSON-utdata som ska användas som en GitHub-hemlighet förAZURE_TENANT_ID
senare.az ad sp create --id $appId
Skapa en ny rolltilldelning för tjänstens huvudnamn. Som standard är rolltilldelningen kopplad till din standardprenumeration. Ersätt
$subscriptionId
med ditt prenumerations-ID,$resourceGroupName
med resursgruppens namn och$servicePrincipalId
med det nyligen skapade tjänsthuvudnamns-ID:t.az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Kör följande kommando för att skapa en ny federerad identitetsautentiseringsuppgift för ditt Microsoft Entra-ID-program.
- Ersätt
APPLICATION-OBJECT-ID
med objectId (genereras när du skapar appen) för ditt Microsoft Entra-ID-program. - Ange ett värde som
CREDENTIAL-NAME
ska refereras senare. subject
Ange . Värdet för detta definieras av GitHub beroende på ditt arbetsflöde:- Jobb i din GitHub Actions-miljö:
repo:< Organization/Repository >:environment:< Name >
- För Jobb som inte är knutna till en miljö inkluderar du referenssökvägen för gren/tagg baserat på referenssökvägen som används för att utlösa arbetsflödet:
repo:< Organization/Repository >:ref:< ref path>
. Exempel:repo:n-username/ node_express:ref:refs/heads/my-branch
ellerrepo:n-username/ node_express:ref:refs/tags/my-tag
. - För arbetsflöden som utlöses av en pull-begärandehändelse:
repo:< Organization/Repository >:pull_request
.
- Jobb i din GitHub Actions-miljö:
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" ] }
- Ersätt
Information om hur du skapar ett Active Directory-program, tjänstens huvudnamn och federerade autentiseringsuppgifter i Azure-portalen finns i Ansluta GitHub och Azure.
Konfigurera GitHub-hemligheten för autentisering
Du måste ange programmets klient-ID, klient-ID och prenumerations-ID för inloggningsåtgärden. Dessa värden kan antingen anges direkt i arbetsflödet eller lagras i GitHub-hemligheter och refereras till i arbetsflödet. Att spara värdena som GitHub-hemligheter är det säkrare alternativet.
Gå till din lagringsplats i GitHub.
Gå till Inställningar i navigeringsmenyn.
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Skapa hemligheter för
AZURE_CLIENT_ID
,AZURE_TENANT_ID
ochAZURE_SUBSCRIPTION_ID
. Använd dessa värden från ditt Microsoft Entra-program för dina GitHub-hemligheter:GitHub-hemlighet Microsoft Entra-program AZURE_CLIENT_ID App-ID (klient-ID) AZURE_TENANT_ID Katalog-ID (klientorganisation) AZURE_SUBSCRIPTION_ID Prenumerations-ID:t Spara varje hemlighet genom att välja Lägg till hemlighet.
Lägga till GitHub-hemligheter för din version
Skapa två nya hemligheter på din GitHub-lagringsplats för
SQLADMIN_PASS
ochSQLADMIN_LOGIN
. Kontrollera att du väljer ett komplext lösenord, annars misslyckas steget skapa för SQL-databasservern. Du kommer inte att kunna komma åt det här lösenordet igen så spara det separat.Skapa en
AZURE_SUBSCRIPTION_ID
hemlighet för ditt Azure-prenumerations-ID. Om du inte känner till ditt prenumerations-ID använder du det här kommandot i Azure Shell för att hitta det. Kopiera värdet iSubscriptionId
kolumnen.az account list -o table
Skapa Azure-resurser
Arbetsflödet skapa Azure-resurser kör en ARM-mall för att distribuera resurser till Azure. Arbetsflödet:
- Checkar ut källkoden med utcheckningsåtgärden.
- Loggar in i Azure med azure-inloggningsåtgärden och samlar in miljö- och Azure-resursinformation.
- Distribuerar resurser med åtgärden Azure Resource Manager Deploy.
Så här kör du arbetsflödet skapa Azure-resurser:
infraworkflow.yml
Öppna filen i på.github/workflows
lagringsplatsen.Uppdatera värdet
AZURE_RESOURCE_GROUP
för till resursgruppens namn.Ange indata för
region
i dina ARM Deploy-åtgärder till din region.- Öppna
templates/azuredeploy.resourcegroup.parameters.json
och uppdatera egenskapenrgLocation
till din region.
- Öppna
Gå till Åtgärder och välj Kör arbetsflöde.
Kontrollera att åtgärden har körts genom att söka efter en grön bockmarkering på sidan Åtgärder .
När du har skapat dina resurser går du till Åtgärder, väljer Skapa Azure-resurser och inaktiverar arbetsflödet.
Skapa en publiceringsprofilhemlighet
I Azure-portalen öppnar du din nya mellanlagringsapptjänst (slot) som skapats
Create Azure Resources
med arbetsflödet.Välj Hämta publiceringsprofil.
Öppna publiceringsprofilfilen i en textredigerare och kopiera innehållet.
Skapa en ny GitHub-hemlighet för
AZURE_WEBAPP_PUBLISH_PROFILE
.
Skapa och distribuera din app
Så här kör du arbetsflödet för att skapa och distribuera:
workflow.yaml
Öppna filen i.github/workflows
på lagringsplatsen.Kontrollera att miljövariablerna för
AZURE_RESOURCE_GROUP
,AZURE_WEBAPP_NAME
,SQLSERVER_NAME
ochDATABASE_NAME
matchar dem iinfraworkflow.yml
.Kontrollera att din app har distribuerats genom att besöka URL:en i utdata från Växla till produktionsplats. Du bör se en exempelapp, My TodoList App.
Rensa resurser
Om du inte längre behöver exempelprojektet tar du bort resursgruppen i Azure-portalen och tar bort lagringsplatsen på GitHub.