Esercitazione: Usare GitHub Actions per eseguire la distribuzione nel 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 del 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 ARM per creare risorse.

Questa esercitazione non usa contenitori. Se si desidera 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 ARM)
  • 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 ID 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 id è 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 un'entità servizio id. L'entità servizio id viene usata come valore dell'argomento --assignee-object-id nel comando az role assignment create nel passaggio successivo.

    Copiare il appOwnerOrganizationId dall'output JSON da usare come segreto GitHub per AZURE_TENANT_ID successivamente.

     az ad sp create --id $appId
    
  3. Creare una nuova assegnazione di ruolo per l'entità servizio. 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 $servicePrincipalId con l'ID entità servizio appena creato.

    az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id  $servicePrincipalId --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 ID.

    • Sostituire APPLICATION-OBJECT-ID con il objectId (generato durante la creazione dell'app) per l'applicazione Microsoft Entra ID.
    • 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 nel portale di Azure, vedere Connettere 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 Sicurezza > Segreti 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 segreto AZURE_SUBSCRIPTION_ID 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 colonna SubscriptionId.

    az account list -o table
    

Creazione di risorse Azure

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

Per eseguire il flusso di lavoro crea risorse di Azure:

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

  2. Aggiornare il valore di AZURE_RESOURCE_GROUP con il nome del gruppo di 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à rgLocation in base all'area di appartenenza.
  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, andare a Azioni, selezionare Crea risorse di Azure, disabilitare il flusso di lavoro.

    Disabilitare il flusso di lavoro Crea risorse di Azure.

Creare un segreto profilo di pubblicazione

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

  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 file workflow.yaml in .github/workflows all'interno del repository.

  2. Verificare che le variabili di ambiente per AZURE_RESOURCE_GROUP, AZURE_WEBAPP_NAME, SQLSERVER_NAME e 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 nel portale di Azure ed eliminare il repository in GitHub.

Passaggi successivi