Eseguire la distribuzione di un contenitore personalizzato nel servizio app usando GitHub Actions
GitHub Actions offre la flessibilità necessaria per 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 del servizio app 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
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente
- Un account GitHub. Se non è disponibile, iscriversi per riceverne uno gratuito. È necessario disporre del codice in un repository GitHub per la distribuzione in app Azure Servizio.
- Un registro contenitori funzionante e un'app del servizio app Azure per i contenitori. Questo esempio usa Registro Azure Container. Assicurarsi di completare la distribuzione completa per app Azure Servizio per i contenitori. A differenza delle normali app Web, le app Web per i contenitori non hanno una pagina di destinazione predefinita. Pubblicare il contenitore per avere un esempio funzionante.
Generare le credenziali per la distribuzione
Il modo consigliato per eseguire l'autenticazione con i servizi di 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.
Passare al servizio app nel portale di Azure.
Nella pagina Panoramica selezionare Recupera profilo di pubblicazione.
Nota
A partire da ottobre 2020, le app Web Linux dovranno impostare l'impostazione dell'app
WEBSITE_WEBDEPLOY_USE_SCM
sutrue
prima 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 nel portale di Azure.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 del 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 AZURE_WEBAPP_PUBLISH_PROFILE
nell'azione Deploy Azure Web App (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.
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 nel portale di Azure in Impostazioni>chiavi di accesso per il Registro di sistema.
Definire un nuovo segreto per il nome utente del Registro di sistema denominato
REGISTRY_USERNAME
.Definire un nuovo segreto per la password del Registro di sistema denominata
REGISTRY_PASSWORD
.
Compilare l'immagine del contenitore
L'esempio seguente illustra 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 a Docker per accedere a più registri contenitori contemporaneamente. Questo esempio include due nuovi segreti GitHub per l'autenticazione con docker.io. Nell'esempio si 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 }}
Eseguire la distribuzione in un contenitore servizio app
Per distribuire l'immagine in un contenitore personalizzato in servizio app, usare l'azione azure/webapps-deploy@v2
. Questa azione ha sette parametri:
Parametro | Spiegazione |
---|---|
app-name | (Obbligatorio) Nome dell'app del servizio app |
publish-profile | (Facoltativo) Si applica a App Web(Windows e Linux) e ai contenitori di app Web (linux). 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 delle immagini del contenitore. 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 di avvio. 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.