Distribuire un contenitore personalizzato nel servizio app Azure con Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
Usando Azure Pipelines, è possibile compilare, testare e distribuire automaticamente l'app Web in un contenitore di app Web del servizio app Azure in Linux. In questo articolo si apprenderà come usare le pipeline YAML o classiche per:
- Compilare e pubblicare un'immagine Docker in Registro Azure Container
- Creare un'app Web di Azure
- Distribuire un contenitore nel servizio app Azure
- Eseguire la distribuzione in slot di distribuzione
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un account GitHub. Creare un account GitHub gratuito, se non ne è già disponibile uno.
- Un'organizzazione Azure DevOps. Creare un'organizzazione, se non ne è già disponibile una.
- Un Registro Azure Container. Creare un registro Azure Container se non ne è già disponibile uno.
Ottenere il codice
Creare una copia tramite fork dell'app di esempio seguente in GitHub.
https://github.com/spring-guides/gs-spring-boot-docker.git
Compilare e pubblicare un'immagine Docker in Registro Azure Container
Per completare correttamente questa sezione, è necessario disporre di un Registro Azure Container. Per informazioni dettagliate, vedere la sezione dei prerequisiti.
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline e quindi Nuova pipeline.
Selezionare GitHub quando viene richiesto il percorso del codice sorgente e quindi selezionare il repository.
Selezionare docker: compilare ed eseguire il push di un'immagine in Registro Azure Container modello di pipeline.
Selezionare la sottoscrizione di Azure e quindi selezionare Continua.
Selezionare il registro Contenitori dal menu a discesa e quindi selezionare Convalida e configura.
Esaminare il modello YAML della pipeline e quindi selezionare Salva ed esegui per compilare e pubblicare l'immagine Docker nel Registro Azure Container.
trigger: - main resources: - repo: self variables: # Container registry service connection established during pipeline creation dockerRegistryServiceConnection: '{{ containerRegistryConnection.Id }}' imageRepository: 'javascriptdocker' containerRegistry: 'sampleappcontainerregistry.azurecr.io' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: Build and push stage jobs: - job: Build displayName: Build pool: vmImage: $(vmImageName) steps: - task: Docker@2 displayName: Build and push an image to container registry inputs: command: buildAndPush repository: $(imageRepository) dockerfile: $(dockerfilePath) containerRegistry: $(dockerRegistryServiceConnection) tags: | $(tag)
Per visualizzare l'immagine Docker pubblicata al termine dell'esecuzione della pipeline, passare al registro contenitori in portale di Azure e quindi selezionare Repository.
Per distribuire l'immagine dal registro contenitori, è necessario abilitare l'account utente amministratore. Passare al registro contenitori in portale di Azure e selezionare Chiavi di accesso. Selezionare quindi il pulsante Attiva/Disattiva per Abilitare l'utente amministratore.
Creare un'app Web
Passare al portale di Azure.
Selezionare Crea contenitori di risorse>e quindi scegliere App Web per contenitori.
Immettere un nome per la nuova app Web e creare un nuovo gruppo di risorse. Selezionare Linux per Sistema operativo.
Nella sezione Piani tariffari scegliere il piano F1 Gratuito.
Seleziona Rivedi e crea. Esaminare la configurazione e selezionare Crea al termine.
Distribuire all'app Web per contenitori
In questo YAML si compila e si esegue il push di un'immagine Docker in un registro contenitori e quindi la si distribuisce nell'app Web di Azure per contenitori. Nella fase di compilazione si compila e si esegue il push di un'immagine Docker in un Registro Azure Container con l'attività Docker@2. L'attività AzureWebAppContainer@1 distribuisce l'immagine nell'app Web per contenitori.
trigger:
- main
resources:
- repo: self
variables:
## Add this under variables section in the pipeline
azureSubscription: <Name of the Azure subscription>
appName: <Name of the Web App>
containerRegistry: <Name of the Azure container registry>
dockerRegistryServiceConnection: '4fa4efbc-59af-4c0b-8637-1d5bf7f268fc'
imageRepository: <Name of image repository>
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
## Add the below snippet at the end of your pipeline
- task: AzureWebAppContainer@1
displayName: 'Azure Web App on Container Deploy'
inputs:
azureSubscription: $(azureSubscription)
appName: $(appName)
containers: $(containerRegistry)/$(imageRepository):$(tag)
Eseguire la distribuzione in uno slot di distribuzione
È possibile configurare il contenitore app Web di Azure in modo che disponga di più slot. Gli slot consentono di distribuire in modo sicuro l'app e testarla prima di renderla disponibile ai clienti. Per altri dettagli, vedere Creare ambienti di staging.
Il frammento di codice YAML seguente illustra come eseguire la distribuzione in uno slot di staging e quindi passare a uno slot di produzione:
- task: AzureWebAppContainer@1
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of the web app>'
containers: $(containerRegistry)/$(imageRepository):$(tag)
deployToSlotOrASE: true
resourceGroupName: '<Name of the resource group>'
slotName: staging
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<Azure service connection>'
WebAppName: '<name of web app>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
Domande frequenti
D: Come è possibile trovare le credenziali del Registro di sistema Docker?
R: Passare a portale di Azure e quindi selezionare l'app Web per contenitori. Selezionare Impostazioni applicazione di configurazione>e quindi fare clic per visualizzare il valore.