Esercizio: distribuire un contenitore Docker in Azure
Il progetto è stato fornito con una pipeline di versione che compila i progetti nella soluzione e distribuisce l'app Web nel servizio app. È ora possibile aggiornare la compilazione della pipeline e distribuire il progetto come contenitore.
In questa unità si apprenderà come:
- Definire alcune variabili della pipeline per semplificare la gestione della pipeline di compilazione.
- Sostituire le attività di compilazione esistenti con un'attività unificata per compilare ed eseguire il push di un contenitore Docker.
- Sostituire l'attività di distribuzione esistente con un'attività di aggiornamento dell'app Web del servizio app con la nuova immagine del contenitore.
- Salvare la pipeline per attivare una compilazione e un rilascio.
Definire le variabili da condividere all'interno della pipeline
In questo caso si aggiungerà una nuova variabile di pipeline alla pipeline YAML esistente definita in azure-pipelines.yml.
In Azure DevOps, passare a Pipelines.
Selezionare la pipeline.
Selezionare Modifica. Assicurarsi che il ramo sia impostato su main selezionandolo dal menu a discesa. Verrà visualizzato il file azure-pipelines.yml .
Aggiungere la riga evidenziata sotto per aggiungere le variabili della pipeline denominate
webRepository
etag
. Verranno usate in più attività per identificare in modo univoco la versione specifica del contenitore a cui si fa riferimento. È anche possibile rimuovere labuildConfiguration
variabile. Non sarà più necessaria.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Sostituire le attività della fase di compilazione
Andy: Non credo che ci sia più bisogno di queste attività di compilazione, perché il Dockerfile nella cartella del progetto definisce già la compilazione desiderata. Non ho avuto però la possibilità di vedere cosa possiamo usare per compilare l'immagine usando un Dockerfile. Qualche idea?
Mara: Lo stavo giusto guardando. Sembra che sia possibile creare il contenitore e persino eseguirne il push nel repository con un'unica attività. Aggiungiamola subito.
Attività Docker
È possibile usare l'attività Docker per compilare e distribuire immagini Docker. Sostituire l'intera fase di compilazione con il frammento YAML seguente.
- command: specifica il comando Docker da eseguire.
- buildContext: specifica il percorso del contesto di compilazione.
- repository: specifica il nome del repository.
- dockerfile: specifica il percorso del Dockerfile.
- containerRegistry: specifica il nome della connessione al servizio registro Docker.
- tags: specifica un elenco di tag in righe separate. Questi tag vengono usati nei comandi build, push e buildAndPush.
- stage: 'Build'
displayName: 'Build and push'
jobs:
- job: 'Build'
displayName: 'Build job'
pool:
vmImage: 'ubuntu-20.04'
steps:
- task: Docker@2
displayName: 'Build and push the image to container registry'
inputs:
command: buildAndPush
buildContext: $(Build.Repository.LocalPath)
repository: $(webRepository)
dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
containerRegistry: 'Container Registry Connection'
tags: |
$(tag)
Sostituire l'attività della fase di distribuzione
Andy: Beh, sembra piuttosto semplice. Ora è sufficiente trovare un'attività che indichi al servizio app di usare la versione appena inserita dell'immagine del contenitore.
Mara: Ci sto già lavorando. È leggermente diverso dalla distribuzione di una compilazione in Azure Pipelines, ma ancora sufficientemente diretto e può essere fatto con un'unica attività. Aggiungiamola subito.
App Web di Azure per attività Contenitore
L'attività App Web di Azure per contenitore è progettata per distribuire contenitori Docker in Servizio app di Azure. Sostituire l'intera fase di compilazione con il frammento YAML seguente.
- appName: specifica il nome di un servizio di app Azure esistente.
- azureSubscription: specifica il nome della sottoscrizione di Azure Resource Manager per la distribuzione.
- imageName: specifica il nome completo dell'immagine del contenitore,
myregistry.azurecr.io/nginx:latest
ad esempio opython:3.7.2-alpine/
.
- stage: 'Deploy'
displayName: 'Deploy the container'
dependsOn: Build
jobs:
- job: 'Deploy'
displayName: 'Deploy job'
pool:
vmImage: 'ubuntu-20.04'
variables:
- group: Release
steps:
- task: AzureWebAppContainer@1
inputs:
appName: $(WebAppName)
azureSubscription: 'Resource Manager - Tailspin - Space Game'
imageName: $(RegistryName)/$(webRepository):$(build.buildId)
Salvare la pipeline per attivare una compilazione e il rilascio
Selezionare Salva nell'angolo superiore destro della pagina. Digitare il messaggio di commit e selezionare Salva per confermare.
Selezionare Esegui e assicurarsi che il ramo sia impostato su main. Al termine, selezionare Esegui.
Selezionare la pipeline per visualizzare i log. Dopo aver completato la compilazione, selezionare l'attività AzureWebAppContainer, quindi selezionare l'URL dell'applicazione del servizio app per visualizzare l'app Web distribuita.
Si dovrebbe vedere l'app Web in esecuzione in Servizio app.
Andy: È un ottimo risultato L'adozione di contenitori è una grande opportunità per il team.