Esercitazione: Usare GitHub Actions per eseguire la distribuzione in servizio app e connettersi a un database

Informazioni su come configurare un flusso di lavoro di GitHub Actions per distribuire un'applicazione ASP.NET Core con un back-end database SQL di Azure. Al termine sarà disponibile un'app ASP.NET in esecuzione in Azure e connessa al database SQL. Si userà prima di tutto un modello di Resource Manager per creare risorse.

Questa esercitazione non usa contenitori. Se si vuole eseguire la distribuzione in un'applicazione ASP.NET Core in contenitori, vedere Usare GitHub Actions per la distribuzione in servizio app per contenitori e connettersi a un database.

In questa esercitazione apprenderai a:

  • Usare un flusso di lavoro di GitHub Actions per aggiungere risorse ad Azure con un modello di Azure Resource Manager (modello di Resource Manager)
  • Usare un flusso di lavoro di GitHub Actions per compilare un'applicazione ASP.NET Core

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

Per completare questa esercitazione, sono necessari gli elementi seguenti:

Scaricare l'esempio

Creare una copia tramite fork del progetto di esempio nel repository Azure Samples.

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

Creare il gruppo di risorse

Aprire Azure Cloud Shell in https://shell.azure.com. In alternativa, è possibile usare l'interfaccia della riga di comando di Azure se è stata installata in locale. Per altre informazioni su Cloud Shell, vedere Panoramica di Cloud Shell.

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

Generare le credenziali per la distribuzione

OpenID Connect è un metodo di autenticazione che utilizza token di breve durata. Configurare OpenID Connect con GitHub Actions è un processo più complesso che offre una maggiore sicurezza.

  1. Se non si dispone di un'applicazione esistente, registrare una nuova applicazione Microsoft Entra e un'entità servizio in grado di accedere alle risorse.

    az ad app create --display-name myApp
    

    Questo comando genererà un oggetto JSON con un appId che corrisponde a client-id. Il objectId è APPLICATION-OBJECT-ID e verrà usato per la creazione di credenziali federate con chiamate API Graph. Salvare il valore da usare come AZURE_CLIENT_ID segreto GitHub in un secondo momento.

  2. Creare un'entità servizio. Sostituire il $appID con il valore appId dall’output JSON. Questo comando genera l'output JSON con una diversa objectId che verrà usata nel passaggio successivo. Il nuovo objectId è assignee-object-id.

    Questo comando genera un output JSON con una diversa objectId e verrà usato nel passaggio successivo. Il nuovo objectId è assignee-object-id.

    Copiare appOwnerTenantId da usare come segreto GitHub per AZURE_TENANT_ID in un secondo momento.

     az ad sp create --id $appId
    
  3. Creare una nuova assegnazione di ruolo per sottoscrizione e oggetto. Per impostazione predefinita, l'assegnazione di ruolo verrà associata alla sottoscrizione predefinita. Sostituire $subscriptionId con l'ID sottoscrizione, $resourceGroupName con il nome del gruppo di risorse e $assigneeObjectId con il assignee-object-id generato (l'ID oggetto dell'entità servizio appena creato).

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
    
  4. Eseguire il comando seguente per creare una nuova credenziale di identità federata per l'applicazione Microsoft Entra.

    • Sostituire APPLICATION-OBJECT-ID con il objectId (generato durante la creazione dell'app) per l'applicazione Microsoft Entra.
    • Impostare un valore per CREDENTIAL-NAME a cui fare riferimento in seguito.
    • Impostare subject. Il valore di questo valore è definito da GitHub a seconda del flusso di lavoro:
      • Processi nell'ambiente GitHub Actions: repo:< Organization/Repository >:environment:< Name >
      • Per i processi non associati a un ambiente, includere il percorso di riferimento per branch/tag in base al percorso di riferimento usato per attivare il flusso di lavoro: repo:< Organization/Repository >:ref:< ref path>. Ad esempio, repo:n-username/ node_express:ref:refs/heads/my-branch o repo:n-username/ node_express:ref:refs/tags/my-tag.
      • Per i flussi di lavoro attivati da un evento di richiesta pull: 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"
        ]
    }
    

Per informazioni su come creare un'applicazione active directory, un'entità servizio e credenziali federate in portale di Azure, vedere Connessione GitHub e Azure.

Configurare il segreto GitHub per l'autenticazione

È necessario specificare l'ID client, l'ID tenant el'ID sottoscrizione dell'applicazione all'azione di accesso. Questi valori possono essere forniti direttamente nel flusso di lavoro oppure possono essere archiviati nei segreti gitHub e riportati nel flusso di lavoro. Salvare i valori come segreti GitHub è l'opzione più sicura.

  1. In GitHub, andare al proprio repository.

  2. Passare a Impostazioni nel menu di spostamento.

  3. Selezionare Segreti di sicurezza > e variabili > Azioni.

    Screenshot dell'aggiunta di un segreto

  4. Selezionare Nuovo segreto repository.

  5. Creare segreti per AZURE_CLIENT_ID, AZURE_TENANT_IDe AZURE_SUBSCRIPTION_ID. Usare questi valori dell'applicazione Microsoft Entra per i segreti di GitHub:

    Segreto GitHub Applicazione Microsoft Entra
    AZURE_CLIENT_ID ID applicazione (client)
    AZURE_TENANT_ID ID della directory (tenant)
    AZURE_SUBSCRIPTION_ID ID sottoscrizione
  6. Salvare ogni segreto selezionando Aggiungi segreto.

Aggiungere segreti GitHub per la compilazione

  1. Creare due nuovi segreti nel repository GitHub per SQLADMIN_PASS e SQLADMIN_LOGIN. Assicurarsi di scegliere una password complessa. In caso contrario, il passaggio di creazione per il server di database SQL avrà esito negativo. Non sarà possibile accedere nuovamente a questa password, quindi salvarla separatamente.

  2. Creare un AZURE_SUBSCRIPTION_ID segreto per l'ID sottoscrizione di Azure. Se non si conosce l'ID sottoscrizione, usare questo comando in Azure Shell per trovarlo. Copiare il valore nella SubscriptionId colonna.

    az account list -o table
    

Creare risorse Azure

Il flusso di lavoro crea risorse di Azure esegue un modello di Resource Manager per distribuire le risorse in Azure. Flusso di lavoro:

Per eseguire il flusso di lavoro crea risorse di Azure:

  1. Aprire il infraworkflow.yml file all'interno .github/workflows del repository.

  2. Aggiornare il valore di con il nome del gruppo di AZURE_RESOURCE_GROUP risorse.

  3. Impostare l'input per region nelle azioni di distribuzione arm nell'area.

    1. Aprire templates/azuredeploy.resourcegroup.parameters.json e aggiornare la proprietà nell'area rgLocation .
  4. Passare a Azioni e selezionare Esegui flusso di lavoro.

    Eseguire il flusso di lavoro di GitHub Actions per aggiungere risorse.

  5. Verificare che l'azione sia stata eseguita correttamente controllando la presenza di un segno di spunta verde nella pagina Azioni .

    Esecuzione riuscita della creazione di risorse.

  6. Dopo aver creato le risorse, passare a Azioni, selezionare Crea risorse di Azure, disabilitare il flusso di lavoro.

    Disabilitare il flusso di lavoro Crea risorse di Azure.

Creare un segreto del profilo di pubblicazione

  1. Nella portale di Azure aprire il nuovo servizio app di staging (slot) creato con il Create Azure Resources flusso di lavoro.

  2. Selezionare Recupera profilo di pubblicazione.

  3. Aprire il file del profilo di pubblicazione in un editor di testo e copiarne il contenuto.

  4. Creare un nuovo segreto GitHub per AZURE_WEBAPP_PUBLISH_PROFILE.

Compilare e distribuire l'app

Per eseguire il flusso di lavoro di compilazione e distribuzione:

  1. Aprire il workflow.yaml file all'interno .github/workflows del repository.

  2. Verificare che le variabili di ambiente per AZURE_RESOURCE_GROUP, AZURE_WEBAPP_NAME, SQLSERVER_NAMEe DATABASE_NAME corrispondano a quelle in infraworkflow.yml.

  3. Verificare che l'app distribuita visitando l'URL nell'output dello slot di produzione Swap to production. Verrà visualizzata un'app di esempio My TodoList App.

Pulire le risorse

Se il progetto di esempio non è più necessario, eliminare il gruppo di risorse nella portale di Azure ed eliminare il repository in GitHub.

Passaggi successivi