Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
È possibile usare GitHub Actions per creare un flusso di lavoro di sviluppo software automatizzato. È possibile usare l'azione Distribuzione Web di Azure per automatizzare il flusso di lavoro e distribuire contenitori personalizzati nel servizio app di Azure.
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, 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. |
| Distribuire | 1. Distribuire l'immagine del contenitore. |
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
- 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.
- Un registro contenitori funzionante e un'app di Servizio app di Azure per i contenitori. Questo esempio usa Registro Azure Container. Assicurarsi di completare la distribuzione completa nel Servizio app di Azure 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.
- Completare queste attività: imparare come creare un'applicazione Node.js containerizzata usando Docker, pubblicare l'immagine del contenitore in un registro e quindi distribuire l'immagine su Azure App Service.
Generare le credenziali per la distribuzione
È consigliabile eseguire l'autenticazione con Servizi app di Azure per GitHub Actions usando OpenID Connect. È anche possibile eseguire l'autenticazione con un'entità servizio o un profilo di pubblicazione.
Per l'autenticazione con Azure, salvare le credenziali del profilo di pubblicazione o l'entità servizio come segreto GitHub. È possibile accedere 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 a Servizio app nel portale di Azure.
Nel riquadro Panoramica selezionare Ottieni il profilo di pubblicazione.
Note
A partire da ottobre 2020, gli utenti devono impostare l'impostazione dell'app per le app
WEBSITE_WEBDEPLOY_USE_SCMWeb Linux sutrueprima di scaricare il file. Per informazioni su come configurare le impostazioni comuni delle app Web, vedere Configurare un'app del servizio app nel portale di Azure.Salvare il file scaricato. Utilizza il contenuto del file per creare un segreto su GitHub.
Configurare il segreto GitHub per l'autenticazione
In GitHub esplorare il repository. Selezionare Impostazioni>Sicurezza>Segreti e variabili>Azioni>Nuovo segreto della repository.
Per usare le credenziali a livello di app, incollare il contenuto del file del profilo di pubblicazione scaricato nel campo del valore del segreto. Assegnare al segreto il nome AZURE_WEBAPP_PUBLISH_PROFILE.
Quando si configura il flusso di lavoro GitHub, usare il AZURE_WEBAPP_PUBLISH_PROFILE segreto 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 Accesso a Docker. L'esempio in questo articolo 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 di Registro Azure Container nel portale di Azure inImpostazioni>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 l'azione può essere usata anche 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 Docker sign in 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 }}
L'esempio seguente mostra parte del flusso di lavoro che compila un'immagine Docker di Windows. Usare Docker Login per accedere a un registro contenitori privato. Questo esempio usa Registro Azure Container ma l'azione può essere usata anche per altri registri.
name: Windows Container Workflow
on: [push]
jobs:
build:
runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
build:
runs-on: windows-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 del servizio app
Per distribuire l'immagine in un contenitore personalizzato nel servizio app, usare l'azione azure/webapps-deploy@v2. Questa azione prevede sette parametri:
| Parametro | Spiegazione |
|---|---|
app-name |
(Obbligatorio) Nome dell'app di App Service. |
publish-profile |
(Facoltativo) Usato con app Web (Windows e Linux) e contenitori di app Web (Linux). Scenario multi-contenitore non supportato. Pubblicare il contenuto del file del profilo \*.publishsettings con i segreti di Web Deploy. |
slot-name |
(Facoltativo) Inserire uno slot esistente diverso dallo slot di produzione. |
package |
(Facoltativo) Usato solo con le app Web: percorso del pacchetto o della cartella.
\*.zip, \*.war, \*.jaro una cartella da distribuire. |
images |
(Obbligatorio) Usato solo con contenitori di app Web: specificare il nome completo dell'immagine del contenitore. Ad esempio, myregistry.azurecr.io/nginx:latest o python:3.12.12-alpine/. Per un'app multi-contenitore, è possibile specificare più nomi di immagine del contenitore (separati da più righe). |
configuration-file |
(Facoltativo) Usato solo con 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 con più contenitori. |
startup-command |
(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 }}'
name: Windows_Container_Workflow
on: [push]
jobs:
build:
runs-on: windows-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 }}'
Contenuti correlati
È possibile trovare il set di azioni raggruppate in repository diversi in GitHub. Ogni repository contiene documentazione ed esempi che consentono di usare GitHub per CI/CD e distribuire le app in Azure.