Condividi tramite


Distribuzione continua con contenitori personalizzati nel Servizio app di Azure

Questo articolo illustra come configurare l'integrazione continua e il recapito continuo (CI/CD) per un'immagine del contenitore personalizzata da repository del Registro Azure Container gestiti o dall'hub Docker.

Vai al Centro di distribuzione

Nel portale di Azure, vai al pannello di gestione per l'app di Azure App Service.

Nel menu della barra laterale in Distribuzione selezionare Centro di Distribuzione>Settings.

Selezionare l'origine del codice

Dal menu a discesa Origine selezionare l'origine della distribuzione in base ai criteri seguenti:

  • Il registro contenitori configura CI/CD tra il registro contenitori e il Servizio app.
  • Selezionare l'opzione GitHub Actions se si mantiene il codice sorgente per l'immagine del contenitore in GitHub. I nuovi commit del repository GitHub attivano l'azione di distribuzione, che può essere eseguita docker build e docker push direttamente nel registro dei contenitori. Aggiorna quindi l'app di App Service per eseguire la nuova immagine. Per altre informazioni, vedere Funzionamento di CI/CD con GitHub Actions.

Se si seleziona GitHub Actions, selezionare Autorizza e seguire le istruzioni di autorizzazione. Se in precedenza è stato autorizzato con GitHub, è possibile eseguire la distribuzione da un repository utente diverso selezionando Cambia account.

Dopo aver autorizzato l'account Azure con GitHub, selezionare l'organizzazione, il repository e il ramo da cui eseguire la distribuzione.

Configurare le impostazioni del Registro di sistema

Configurare le impostazioni del Registro di sistema

Note

I contenitori sidecar avranno esito positivo nelle app multi-contenitore (Docker Compose) nel Servizio app. Per iniziare, vedere Esercitazione: Configurare un contenitore sidecar per i contenitori personalizzati in Servizio app di Azure.

Per distribuire un'app multi-contenitore (Docker Compose), selezionare Docker Compose in Tipo di contenitore. Se l'elenco a discesa Tipo di contenitore non è visualizzato, scorrere fino a Origine e selezionare Registro Contenitori.

In Origine registro selezionare il percorso del registro contenitori. Se non si tratta di Registro Azure Container o dell'hub Docker, selezionare Registro di sistema privato.

Note

Se l'app multi-contenitore (Docker Compose) usa più immagini private, assicurarsi che le immagini private si trovino nello stesso registro privato e siano accessibili con le stesse credenziali utente. Se l'app multi-contenitore usa solo immagini pubbliche, selezionare Hub Docker, anche se alcune immagini non si trovano nell'hub Docker.

Seguire i passaggi successivi selezionando la scheda corrispondente alla scelta.

L'elenco a discesa Registro visualizza i registri nella stessa sottoscrizione dell'app. Selezionare il registro desiderato.

Per eseguire la distribuzione da un registro in una sottoscrizione diversa, selezionare registro privato nell'origine registro invece.

Per usare le identità gestite per bloccare l'accesso al Registro Azure Container, vedere:

Selezionare l'immagine e il tag da distribuire. È possibile digitare il comando di avvio in File di avvio.

Scegliere il passaggio successivo in base al valore Del tipo di contenitore :

  • Docker Compose: Seleziona il registro per le immagini private. Selezionare Scegli file per caricare il file Docker Compose oppure semplicemente incollare il contenuto del file Docker Compose in Config.
  • Singolo contenitore: selezionare i valori per Image e Tag da distribuire. È possibile digitare il comando di avvio in File di avvio.

Il servizio App aggiunge la stringa nel file di avvio alla fine del comando docker run (come il segmento [COMMAND] [ARG...]) quando il contenitore si avvia.

Abilitare CI/CD

Abilitare CI/CD

Il Servizio app supporta l'integrazione CI/CD con Registro Azure Container e i Docker Hub. Per abilitare l'integrazione CI/CD, selezionare nella distribuzione continua.

Note

Se si seleziona GitHub Actions in Origine, questa opzione non viene visualizzata perché CI/CD viene gestito direttamente da GitHub Actions. Viene invece visualizzata una sezione Configurazione flusso di lavoro in cui è possibile selezionare Anteprima file per esaminare il file del flusso di lavoro. Azure esegue il commit di questo file nel repository di origine GitHub selezionato per gestire le attività di compilazione e distribuzione. Per altre informazioni, vedere Funzionamento di CI/CD con GitHub Actions.

Quando si abilita questa opzione, il Servizio app aggiunge un webhook al repository in Registro Azure Container o in Docker Hub. Il repository invia a questo webhook ogni volta che l'immagine selezionata viene aggiornata con docker push. Il webhook causa il riavvio dell'app del Servizio app e l'esecuzione di docker pull per ottenere l'immagine aggiornata.

Per assicurarsi che il webhook funzioni correttamente, abilitare l'opzione Credenziali di autenticazione di base per la pubblicazione all'interno dell'app Web. In caso contrario, potrebbe essere visualizzato un errore di tipo "401 non autorizzato" per il webhook.

Per verificare se l'opzione Credenziali di Pubblicazione di Autenticazione di Base è abilitata, vai su Configurazione>Impostazioni Generali nell'app Web. Cercare la sezione Impostazioni piattaforma, e poi selezionare l'opzione Credenziali di pubblicazione dell'autenticazione di base.

Per altri registri privati, è possibile inviare manualmente al webhook o effettuare questa operazione come passaggio in una pipeline CI/CD. In URL webhook selezionare il pulsante Copia per ottenere l'URL del webhook.

Per salvare le impostazioni, fare clic su Salva.

Note

Il supporto per le app multi-contenitore (Docker Compose) è limitato. Per Registro Azure Container, il Servizio app crea un webhook nel registro selezionato con il registro come ambito. Un docker push a qualsiasi repository nel registro (inclusi quelli a cui non fa riferimento il file Docker Compose) attiva un riavvio dell'app. È possibile modificare il webhook in un ambito più ristretto. Docker Hub non supporta webhook a livello di registro. È necessario aggiungere manualmente i webhook alle immagini specificate nel file Docker Compose.

Funzionamento di CI/CD con GitHub Actions

Se si seleziona GitHub Actions dal menu a discesa Seleziona origine codice , il servizio app configura CI/CD nei modi seguenti:

  • Inserisce un file del flusso di lavoro di GitHub Actions nel repository GitHub per gestire le attività di compilazione e distribuzione su App Service.
  • Aggiunge le credenziali per il registro privato come segreti GitHub. Il file del flusso di lavoro generato esegue l'azione Azure/docker-login per accedere con il registro privato. Viene quindi eseguito docker push per implementarlo.
  • Aggiunge il profilo di pubblicazione dell'app come segreto su GitHub. Il file del flusso di lavoro generato usa questo segreto per l'autenticazione con il servizio app. Esegue quindi l'azione Azure/webapps-deploy per configurare l'immagine aggiornata, che attiva il riavvio di un'app per eseguire il pull dell'immagine aggiornata.
  • Acquisisce informazioni dai log di esecuzione del flusso di lavoro e le visualizza nella scheda Log del Centro distribuzione dell'app.

È possibile personalizzare il provider di compilazione GitHub Actions nei modi seguenti:

  • Personalizzare il file del flusso di lavoro dopo che viene generato nel repository GitHub. Per attivare un riavvio dell'app, il flusso di lavoro deve terminare con l'azione Azure/webapps-deploy . Per altre informazioni, vedere Sintassi del flusso di lavoro per GitHub Actions.
  • Se il ramo selezionato è protetto, è comunque possibile visualizzare in anteprima il file del flusso di lavoro senza salvare la configurazione. Aggiungi manualmente nel tuo repository sia esso che i segreti GitHub necessari. Questo metodo non offre l'integrazione dei log con il portale di Azure.
  • Anziché utilizzare un profilo di pubblicazione, eseguire la distribuzione usando un service principal in Microsoft Entra ID.

Eseguire l'autenticazione con un'entità servizio

Questa configurazione facoltativa sostituisce l'autenticazione predefinita con i profili di pubblicazione nel file del flusso di lavoro generato.

Generare un'entità servizio principale usando il az ad sp create-for-rbac comando nell'Azure CLI. Nell'esempio seguente sostituire <subscription-id>, <group-name> e <app-name> con valori propri. Salvare l'intero output JSON per il passaggio successivo, incluso il livello {}superiore.

az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
                            --json-auth

Importante

Per la sicurezza, concedere l'accesso minimo necessario all'entità servizio. Nell'esempio precedente l'ambito è limitato all'app del Servizio app specifica, e non include l'intero gruppo di risorse.

In GitHub passare al repository e quindi selezionare Impostazioni>Segreti>Aggiungi un nuovo segreto. Incollare l'intero output JSON del comando dell'interfaccia della riga di comando di Azure nel campo del valore del segreto. Assegnare al segreto un nome come AZURE_CREDENTIALS.

Nel file del flusso di lavoro generato dal Centro distribuzione rivedere il azure/webapps-deploy passaggio con codice simile all'esempio seguente:

- name: Sign in to Azure 
# Use the GitHub secret you added
- uses: azure/login@v1
    with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
    with:
    app-name: '<app-name>'
    slot-name: 'production'
    images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
    - name: Sign out of Azure
    run: |
    az logout

Automatizzare con l'interfaccia della riga di comando

Per configurare il registro contenitori e l'immagine Docker, eseguire az webapp config container set.

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'

Per configurare un'app multi-contenitore (Docker Compose), preparare un file Docker Compose in locale, quindi eseguire az webapp config container set con il parametro--multicontainer-config-file. Se il file Docker Compose contiene immagini private, aggiungere --docker-registry-server-* parametri come illustrato nell'esempio precedente.

az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>

Per configurare CI/CD dal registro dei contenitori all'app, eseguire az webapp deployment container config con il parametro --enable-cd. Il comando restituisce l'URL del webhook, ma è necessario creare manualmente il webhook nel Registro di sistema in un passaggio separato. L'esempio seguente abilita CI/CD sulla tua app e quindi utilizza l'URL del webhook nell'output per creare il webhook nell'Azure Container Registry.

ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)

az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'