Dela via


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:

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.

  1. 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 din client-id. is id APPLICATION-OBJECT-ID och används för att skapa federerade autentiseringsuppgifter med Graph API-anrop. Spara värdet som ska användas som AZURE_CLIENT_ID GitHub-hemlighet senare.

  2. 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 huvudnamn id används som värdet för --assignee-object-id argumentet i az role assignment create kommandot i nästa steg.

    appOwnerOrganizationId Kopiera från JSON-utdata som ska användas som en GitHub-hemlighet för AZURE_TENANT_ID senare.

     az ad sp create --id $appId
    
  3. 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
    
  4. 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.
    • subjectAnge . 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 eller repo: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.
    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"
        ]
    }
    

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.

  1. Gå till din lagringsplats i GitHub.

  2. Gå till Inställningar i navigeringsmenyn.

  3. Välj Säkerhetshemligheter > och variabler > Åtgärder.

    Skärmbild av att lägga till en hemlighet

  4. Välj Ny lagringsplatshemlighet.

  5. Skapa hemligheter för AZURE_CLIENT_ID, AZURE_TENANT_IDoch AZURE_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
  6. Spara varje hemlighet genom att välja Lägg till hemlighet.

Lägga till GitHub-hemligheter för din version

  1. Skapa två nya hemligheter på din GitHub-lagringsplats för SQLADMIN_PASS och SQLADMIN_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.

  2. 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 i SubscriptionId 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:

  1. infraworkflow.yml Öppna filen i på .github/workflows lagringsplatsen.

  2. Uppdatera värdet AZURE_RESOURCE_GROUP för till resursgruppens namn.

  3. Ange indata för region i dina ARM Deploy-åtgärder till din region.

    1. Öppna templates/azuredeploy.resourcegroup.parameters.json och uppdatera egenskapen rgLocation till din region.
  4. Gå till Åtgärder och välj Kör arbetsflöde.

    Kör GitHub Actions-arbetsflödet för att lägga till resurser.

  5. Kontrollera att åtgärden har körts genom att söka efter en grön bockmarkering på sidan Åtgärder .

    Lyckad körning av skapa resurser.

  6. När du har skapat dina resurser går du till Åtgärder, väljer Skapa Azure-resurser och inaktiverar arbetsflödet.

    Inaktivera arbetsflödet Skapa Azure-resurser.

Skapa en publiceringsprofilhemlighet

  1. I Azure-portalen öppnar du din nya mellanlagringsapptjänst (slot) som skapats Create Azure Resources med arbetsflödet.

  2. Välj Hämta publiceringsprofil.

  3. Öppna publiceringsprofilfilen i en textredigerare och kopiera innehållet.

  4. 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:

  1. workflow.yaml Öppna filen i .github/workflows på lagringsplatsen.

  2. Kontrollera att miljövariablerna för AZURE_RESOURCE_GROUP, AZURE_WEBAPP_NAME, SQLSERVER_NAMEoch DATABASE_NAME matchar dem i infraworkflow.yml.

  3. 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.

Nästa steg