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
- 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 Servizio app di Azure.
- Registro contenitori di lavoro e app Servizio app di Azure per i contenitori. Questo esempio usa Registro Azure Container. Assicurarsi di completare la distribuzione completa in Servizio app di Azure per i contenitori. A differenza delle app Web regolari, 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 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.
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
WEBSITE_WEBDEPLOY_USE_SCM
dell'app 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 nella 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 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.
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.
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 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.