Delen via


Zelfstudie: GitHub Actions gebruiken om te implementeren in een aangepaste App Service-container en verbinding te maken met een database

Deze zelfstudie begeleidt u bij het instellen van een GitHub Actions-werkstroom voor het implementeren van een in een container geplaatste ASP.NET Core-toepassing met een Back-end van Azure SQL Database . Wanneer u klaar bent, hebt u een ASP.NET-app die wordt uitgevoerd in Azure en is verbonden met SQL Database. U maakt eerst Azure-resources met een GitHub Actions-werkstroom voor een ARM-sjabloon .

In deze zelfstudie leert u het volgende:

  • Een GitHub Actions-werkstroom gebruiken om resources toe te voegen aan Azure met een Azure Resource Manager-sjabloon (ARM-sjabloon)
  • Een GitHub Actions-werkstroom gebruiken om een container te bouwen met de meest recente wijzigingen in de web-app

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

Voor het voltooien van deze zelfstudie hebt u het volgende nodig:

  • Een Azure-account met een actief abonnement. Gratis een account maken
  • Een GitHub-account. Als u geen account hebt, kunt u zich registreren voor een gratis account.
    • Een GitHub-opslagplaats voor het opslaan van uw Resource Manager-sjablonen en uw werkstroombestanden. Zie Een nieuwe opslagplaats maken om er een te maken.

Het voorbeeld downloaden

Fork het voorbeeldproject in de opslagplaats Azure Samples.

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

De resourcegroep maken

Open de Azure Cloud Shell op https://shell.azure.com. U kunt de Azure CLI ook gebruiken als u deze lokaal hebt geïnstalleerd. (Zie het Overzicht van Cloud Shell voor meer informatie over Cloud Shell.)

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

Genereer implementatiereferenties

OpenID Connect is een verificatiemethode die gebruikmaakt van kortstondige tokens. Het instellen van OpenID Connect met GitHub Actions is complexer en biedt beperkte beveiliging.

  1. Als u geen bestaande toepassing hebt, registreert u een nieuwe Microsoft Entra ID-toepassing en service-principal die toegang heeft tot resources.

    az ad app create --display-name myApp
    

    Met deze opdracht wordt JSON uitgevoerd met een appId JSON die uw client-id. Dit id wordt APPLICATION-OBJECT-ID gebruikt voor het maken van federatieve referenties met Graph API-aanroepen. Sla de waarde op die u later wilt gebruiken als het AZURE_CLIENT_ID GitHub-geheim.

  2. Een service-principal maken. Vervang de door de $appID appId uit uw JSON-uitvoer.

    Met deze opdracht wordt JSON-uitvoer gegenereerd met een service-principal id. De service-principal id wordt gebruikt als de waarde van het --assignee-object-id argument in de az role assignment create opdracht in de volgende stap.

    Kopieer de appOwnerOrganizationId uitvoer van de JSON om te gebruiken als een GitHub-geheim voor AZURE_TENANT_ID later gebruik.

     az ad sp create --id $appId
    
  3. Maak een nieuwe roltoewijzing voor uw service-principal. De roltoewijzing wordt standaard gekoppeld aan uw standaardabonnement. Vervang $subscriptionId door uw abonnements-id, $resourceGroupName door de naam van de resourcegroep en $servicePrincipalId door de zojuist gemaakte service-principal-id.

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $servicePrincipalId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
    
  4. Voer de volgende opdracht uit om een nieuwe federatieve identiteitsreferentie te maken voor uw Microsoft Entra ID-toepassing.

    • Vervang door APPLICATION-OBJECT-ID de objectId (gegenereerd tijdens het maken van een app) voor uw Microsoft Entra ID-toepassing.
    • Stel een waarde in om CREDENTIAL-NAME later te verwijzen.
    • Stel de subject in. De waarde hiervan wordt gedefinieerd door GitHub, afhankelijk van uw werkstroom:
      • Taken in uw GitHub Actions-omgeving: repo:< Organization/Repository >:environment:< Name >
      • Voor taken die niet zijn gekoppeld aan een omgeving, moet u het referentiepad voor vertakkingen/tags opnemen op basis van het referentiepad dat wordt gebruikt voor het activeren van de werkstroom: repo:< Organization/Repository >:ref:< ref path>. Bijvoorbeeld repo:n-username/ node_express:ref:refs/heads/my-branch of repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Voor werkstromen die door een pull-aanvraaggebeurtenis zijn geactiveerd: 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"
        ]
    }
    

Zie Connect GitHub en Azure voor meer informatie over het maken van een Active Directory-toepassing, service-principal en federatieve referenties in Azure Portal.

Het GitHub-geheim configureren voor verificatie

U moet de client-id, tenant-id en abonnements-id van uw toepassing opgeven voor de aanmeldingsactie. Deze waarden kunnen rechtstreeks in de werkstroom worden opgegeven of kunnen worden opgeslagen in GitHub-geheimen en waarnaar wordt verwezen in uw werkstroom. Het opslaan van de waarden als GitHub-geheimen is de veiligere optie.

  1. Ga in GitHub naar uw opslagplaats.

  2. Ga naar Instellingen in het navigatiemenu.

  3. Selecteer Acties voor beveiligingsgeheimen > en variabelen>.

    Schermopname van het toevoegen van een geheim

  4. Selecteer Nieuw opslagplaatsgeheim.

  5. Geheimen maken voor AZURE_CLIENT_ID, AZURE_TENANT_IDen AZURE_SUBSCRIPTION_ID. Gebruik deze waarden uit uw Microsoft Entra-toepassing voor uw GitHub-geheimen:

    GitHub-geheim Microsoft Entra-toepassing
    AZURE_CLIENT_ID Client-id van toepassing
    AZURE_TENANT_ID Id van directory (tenant)
    AZURE_SUBSCRIPTION_ID Abonnements-id
  6. Sla elk geheim op door Geheim toevoegen te selecteren.

Een SQL Server-geheim toevoegen

Maak een nieuw geheim in uw opslagplaats voor SQL_SERVER_ADMIN_PASSWORD. Dit geheim kan elk wachtwoord zijn dat voldoet aan de Azure-standaarden voor wachtwoordbeveiliging. U hebt geen toegang meer tot dit wachtwoord, dus sla het wachtwoord afzonderlijk op.

Azure-resources maken

Met de werkstroom Azure-resources maken wordt een ARM-sjabloon uitgevoerd om resources in Azure te implementeren. De werkstroom:

Ga als volgende te werk om de werkstroom Azure-resources maken uit te voeren:

  1. Open het azuredeploy.yaml bestand in .github/workflows uw opslagplaats.

  2. Werk de waarde van AZURE_RESOURCE_GROUP uw resourcegroepnaam bij.

  3. Werk de waarden van en SQL_SERVER_NAME naar de naam van WEB_APP_NAME uw web-app en de sql-servernaam bij.

  4. Ga naar Acties en selecteer Werkstroom uitvoeren.

    Voer de GitHub Actions-werkstroom uit om resources toe te voegen.

  5. Controleer of uw actie is uitgevoerd door te controleren op een groen vinkje op de pagina Acties .

    Geslaagde uitvoering van het maken van resources.

Containerregister en SQL-geheimen toevoegen

  1. Open in Azure Portal uw zojuist gemaakte Azure Container Registry in uw resourcegroep.

  2. Ga naar Access-sleutels en kopieer de waarden voor de gebruikersnaam en het wachtwoord.

  3. Maak nieuwe GitHub-geheimen voor ACR_USERNAME en ACR_PASSWORD wachtwoord in uw opslagplaats.

  4. Open uw Azure SQL-database in Azure Portal. Open verbindingsreeksen en kopieer de waarde.

  5. Maak een nieuw geheim voor SQL_CONNECTION_STRING. Vervang {your_password} door uw SQL_SERVER_ADMIN_PASSWORD.

Uw installatiekopieën bouwen, pushen en implementeren

De build-, push- en implementatiewerkstroom bouwt een container met de meest recente app-wijzigingen, pusht de container naar Azure Container Registry en werkt de staging-site van de webtoepassing bij zodat deze verwijst naar de meest recente container die is gepusht. De werkstroomcontainers zijn een build- en implementatietaak:

  • Met de buildtaak wordt de broncode uitgecheckt met de actie Uitchecken. De taak gebruikt vervolgens de docker-aanmeldingsactie en een aangepast script om te verifiëren met Azure Container Registry, een containerinstallatiekopieën te bouwen en deze te implementeren in Azure Container Registry.
  • De implementatietaak meldt zich aan bij Azure met de azure-aanmeldingsactie en verzamelt omgevings- en Azure-resourcegegevens. De taak werkt vervolgens web-app-instellingen bij met de actie Azure-app Service-instellingen en wordt geïmplementeerd in een App Service-staging-site met de actie Azure Web Deploy. Ten slotte voert de taak een aangepast script uit om de SQL-database bij te werken en wisselt staging-site naar productie.

De werkstroom bouwen, pushen en implementeren uitvoeren:

  1. Open het build-deploy.yaml bestand in .github/workflows uw opslagplaats.

  2. Controleer of de omgevingsvariabelen voor AZURE_RESOURCE_GROUP en WEB_APP_NAME overeenkomen met de omgevingsvariabelen in azuredeploy.yaml.

  3. Werk de waarde voor uw ACR_LOGIN_SERVER Azure Container Registry-aanmeldingsserver bij.

Volgende stappen