Dela via


Självstudie: Använda GitHub Actions för att distribuera till en anpassad App Service-container och ansluta till en databas

Den här självstudien beskriver hur du konfigurerar ett GitHub Actions-arbetsflöde för att distribuera ett containerbaserat 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. Först skapar du Azure-resurser med ett GITHub Actions-arbetsflöde för ARM-mallar .

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 en container med de senaste ändringarna i webbappen

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-containerized-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 en SQL Server-hemlighet

Skapa en ny hemlighet på lagringsplatsen för SQL_SERVER_ADMIN_PASSWORD. Den här hemligheten kan vara valfritt lösenord som uppfyller Azures standarder för lösenordssäkerhet. Du kommer inte att kunna komma åt det här lösenordet igen så spara det separat.

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. azuredeploy.yaml Öppna filen i på .github/workflows lagringsplatsen.

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

  3. Uppdatera värdena WEB_APP_NAME för och SQL_SERVER_NAME till webbappens namn och sql server-namn.

  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.

Lägga till containerregister och SQL-hemligheter

  1. Öppna ditt nyligen skapade Azure Container Registry i resursgruppen i Azure-portalen.

  2. Gå till Åtkomstnycklar och kopiera värdena för användarnamn och lösenord.

  3. Skapa nya GitHub-hemligheter för ACR_USERNAME och ACR_PASSWORD lösenord på lagringsplatsen.

  4. Öppna din Azure SQL-databas i Azure-portalen. Öppna Anslutningssträngar och kopiera värdet.

  5. Skapa en ny hemlighet för SQL_CONNECTION_STRING. Ersätt {your_password} med .SQL_SERVER_ADMIN_PASSWORD

Skapa, push-överföra och distribuera avbildningen

Arbetsflödet för att skapa, pusha och distribuera skapar en container med de senaste appändringarna, push-överför containern till Azure Container Registry och uppdaterar mellanlagringsplatsen för webbprogram så att den pekar på den senaste push-överföringscontainern. Arbetsflödet containrar ett bygg- och distributionsjobb:

  • Byggjobbet checkar ut källkoden med utcheckningsåtgärden. Jobbet använder sedan inloggningsåtgärden Docker och ett anpassat skript för att autentisera med Azure Container Registry, skapa en containeravbildning och distribuera den till Azure Container Registry.
  • Distributionsjobbet loggar in i Azure med azure-inloggningsåtgärden och samlar in miljö- och Azure-resursinformation. Jobbet uppdaterar sedan Webbappinställningar med åtgärden Azure App Service-inställningar och distribueras till en Mellanlagringsplats för App Service med åtgärden Azure Web Deploy. Slutligen kör jobbet ett anpassat skript för att uppdatera SQL-databasen och växlar mellanlagringsplatsen till produktion.

Så här kör du arbetsflödet build, push och deploy:

  1. build-deploy.yaml Öppna filen i .github/workflows på lagringsplatsen.

  2. Kontrollera att miljövariablerna för AZURE_RESOURCE_GROUP och WEB_APP_NAME matchar dem i azuredeploy.yaml.

  3. ACR_LOGIN_SERVER Uppdatera värdet för din Azure Container Registry-inloggningsserver.

Nästa steg