Eseguire la distribuzione di un contenitore personalizzato nel servizio app usando GitHub Actions

GitHub Actions offre la flessibilità di creare un flusso di lavoro di sviluppo software automatizzato. Con l'azione Distribuzione Web di Azure, è possibile automatizzare il flusso di lavoro per distribuire contenitori personalizzati in servizio app usando GitHub Actions.

Un flusso di lavoro viene definito da un file YAML (con estensione yml) nel percorso /.github/workflows/ del repository. Questa definizione contiene i vari passaggi e parametri presenti nel flusso di lavoro.

Per un flusso di lavoro del contenitore Servizio app di Azure, il file include tre sezioni:

Sezione Attività
autenticazione 1. Recuperare un'entità servizio o un profilo di pubblicazione.
2. Creare un segreto GitHub.
Build 1. Creare l'ambiente.
2. Compilare l'immagine del contenitore.
Distribuzione 1. Distribuire l'immagine del contenitore.

Prerequisiti

Generare le credenziali per la distribuzione

Il modo consigliato per eseguire l'autenticazione con servizi app Azure per GitHub Actions è con un profilo di pubblicazione. È anche possibile eseguire l'autenticazione con un'entità servizio o Open ID Connect, ma il processo richiede altri passaggi.

Salvare le credenziali del profilo di pubblicazione o l'entità servizio come segreto GitHub per l'autenticazione con Azure. Si accederà al segreto all'interno del flusso di lavoro.

Un profilo di pubblicazione è una credenziale a livello di app. Configurare il profilo di pubblicazione come segreto GitHub.

  1. Passare al servizio app nel portale di Azure.

  2. Nella pagina Panoramica selezionare Recupera profilo di pubblicazione.

    Nota

    A partire da ottobre 2020, le app Web Linux dovranno impostare l'impostazione WEBSITE_WEBDEPLOY_USE_SCM dell'app su trueprima di scaricare il file. Questo requisito verrà rimosso in futuro. Per informazioni su come configurare le impostazioni comuni dell'app Web, vedere Configurare un'app servizio app nella portale di Azure.

  3. Salvare il file scaricato. Si userà il contenuto del file per creare un segreto GitHub.

Configurare il segreto GitHub per l'autenticazione

In GitHub esplorare il repository. Selezionare Impostazioni Segreti di sicurezza > e variabili > Azioni >> Nuovo segreto del repository.

Per usare le credenziali a livello di app, incollare il contenuto del file di profilo di pubblicazione scaricato nel campo valore del segreto. Assegnare al segreto il nome AZURE_WEBAPP_PUBLISH_PROFILE.

Quando si configura il flusso di lavoro gitHub, usare nell'azione AZURE_WEBAPP_PUBLISH_PROFILE Distribuisci app Web di Azure. Ad esempio:

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Configurare i segreti di GitHub per il Registro di sistema

Definire i segreti da usare con l'azione Docker Login. L'esempio in questo documento usa Registro Azure Container per il Registro contenitori.

  1. Passare al contenitore nel portale di Azure o Docker e copiare il nome utente e la password. È possibile trovare il nome utente e la password Registro Azure Container nella portale di Azure in Impostazioni>chiavi di accesso per il Registro di sistema.

  2. Definire un nuovo segreto per il nome utente del Registro di sistema denominato REGISTRY_USERNAME.

  3. Definire un nuovo segreto per la password del Registro di sistema denominata REGISTRY_PASSWORD.

Compilare l'immagine contenitore

L'esempio seguente mostra parte del flusso di lavoro che compila un'immagine Docker Node.JS. Usare Docker Login per accedere a un registro contenitori privato. Questo esempio usa Registro Azure Container ma la stessa azione funziona per altri registri.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

È anche possibile usare l'accesso Docker per accedere a più registri contenitori contemporaneamente. Questo esempio include due nuovi segreti GitHub per l'autenticazione con docker.io. L'esempio presuppone che sia presente un Dockerfile a livello radice del Registro di sistema.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Distribuire in un contenitore di servizio app

Per distribuire l'immagine in un contenitore personalizzato in servizio app, usare l'azioneazure/webapps-deploy@v2. Questa azione include sette parametri:

Parametro Spiegazione
app-name (Obbligatorio) Nome dell'app del servizio app
publish-profile (Facoltativo) Si applica ai contenitori di App Web(Windows e Linux) e app Web(linux). Lo scenario multi contenitore non è supportato. Pubblicare il contenuto del file (*.publishsettings) con i segreti di distribuzione Web
slot-name (Facoltativo) Immettere uno slot esistente diverso dallo slot di produzione
package (Facoltativo) Si applica solo all'app Web: percorso del pacchetto o della cartella. *.zip, *.war, *.jar o una cartella per la distribuzione
images (Obbligatorio) Si applica solo ai contenitori di app Web: specificare il nome completo dei contenitori. Ad esempio, "myregistry.azurecr.io/nginx:latest" o "python:3.7.2-alpine/". Per un'app multi-contenitore, è possibile specificare più nomi di immagine del contenitore (separati da più righe)
file di configurazione (Facoltativo) Si applica solo ai contenitori di app Web: percorso del file Docker-Compose. Deve essere un percorso completo o relativo alla directory di lavoro predefinita. Obbligatorio per le app multi-contenitore.
comando di avvio (Facoltativo) Immettere il comando start-up. Ad esempio, dotnet run o dotnet filename.dll
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

Passaggi successivi

Il set di azioni raggruppate in repository diversi è disponibile in GitHub. Ogni repository contiene documentazione ed esempi che consentono di usare GitHub per CI/CD e distribuire le app in Azure.