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

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.

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline e quindi Nuova pipeline.

  3. Selezionare GitHub quando viene richiesto il percorso del codice sorgente e quindi selezionare il repository.

  4. Selezionare docker: compilare ed eseguire il push di un'immagine in Registro Azure Container modello di pipeline.

    Selezionare il modello di pipeline Docker

  5. Selezionare la sottoscrizione di Azure e quindi selezionare Continua.

  6. Selezionare il registro Contenitori dal menu a discesa e quindi selezionare Convalida e configura.

    Convalidare e configurare Docker

  7. 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)
    
  8. Per visualizzare l'immagine Docker pubblicata al termine dell'esecuzione della pipeline, passare al registro contenitori in portale di Azure e quindi selezionare Repository.

    Immagine Docker pubblicata in Registro Azure Container

  9. 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 Amministrazione utente.

    Abilitare Amministrazione utente

Creare un'app Web

  1. Passare al portale di Azure.

  2. Selezionare Crea contenitori di risorse>e quindi scegliere App Web per contenitori.

    Creare un'app Web per la risorsa contenitori

  3. Immettere un nome per la nuova app Web e creare un nuovo gruppo di risorse. Selezionare Linux per Sistema operativo.

    Configurare l'app Web

  4. Nella sezione Piani tariffari scegliere il piano F1 Gratuito.

  5. 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.

Screenshot che mostra come trovare le credenziali del Registro di sistema Docker.