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:
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un account GitHub. Se non è disponibile, iscriversi per riceverne uno gratuito.
- Un repository GitHub per archiviare i modelli di Resource Manager e i file del flusso di lavoro. Per crearne uno, vedere Creazione di un nuovo repository.
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.
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 aclient-id
. Ilid
èAPPLICATION-OBJECT-ID
e verrà usato per la creazione di credenziali federate con chiamate API Graph. Salvare il valore da usare comeAZURE_CLIENT_ID
segreto GitHub in un secondo momento.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à servizioid
viene usata come valore dell'argomento--assignee-object-id
nel comandoaz role assignment create
nel passaggio successivo.Copiare il
appOwnerOrganizationId
dall'output JSON da usare come segreto GitHub perAZURE_TENANT_ID
successivamente.az ad sp create --id $appId
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
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
orepo: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
.
- Processi nell'ambiente GitHub Actions:
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" ] }
- Sostituire
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.
In GitHub, andare al proprio repository.
Passare a Impostazioni nel menu di spostamento.
Selezionare Sicurezza > Segreti e variabili > Azioni.
Selezionare Nuovo segreto repository.
Creare segreti per
AZURE_CLIENT_ID
,AZURE_TENANT_ID
eAZURE_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 Salvare ogni segreto selezionando Aggiungi segreto.
Aggiungere segreti GitHub per la compilazione
Creare due nuovi segreti nel repository GitHub per
SQLADMIN_PASS
eSQLADMIN_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.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 colonnaSubscriptionId
.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:
- Estrae il codice sorgente con l'azione Checkout.
- Accedere ad Azure con l'azione Accesso di Azure e raccogliere informazioni sull'ambiente e sulle risorse di Azure.
- Distribuisce le risorse con l'azione Distribuisci di Azure Resource Manager.
Per eseguire il flusso di lavoro crea risorse di Azure:
Aprire il file
infraworkflow.yml
in.github/workflows
all'interno del repository.Aggiornare il valore di
AZURE_RESOURCE_GROUP
con il nome del gruppo di risorse.Impostare l'input per
region
nelle azioni di distribuzione ARM nell'area.- Aprire
templates/azuredeploy.resourcegroup.parameters.json
e aggiornare la proprietàrgLocation
in base all'area di appartenenza.
- Aprire
Passare a Azioni e selezionare Esegui flusso di lavoro.
Verificare che l'azione sia stata eseguita correttamente controllando la presenza di un segno di spunta verde nella pagina Azioni.
Dopo aver creato le risorse, andare a Azioni, selezionare Crea risorse di Azure, disabilitare il flusso di lavoro.
Creare un segreto profilo di pubblicazione
Nel portale di Azure aprire il nuovo Servizio app di staging (slot) creato con il flusso di lavoro
Create Azure Resources
.Selezionare Recupera profilo di pubblicazione.
Aprire il file del profilo di pubblicazione in un editor di testo e copiarne il contenuto.
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:
Aprire il file
workflow.yaml
in.github/workflows
all'interno del repository.Verificare che le variabili di ambiente per
AZURE_RESOURCE_GROUP
,AZURE_WEBAPP_NAME
,SQLSERVER_NAME
eDATABASE_NAME
corrispondano a quelle ininfraworkflow.yml
.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.