Condividi tramite


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 di Azure.
  • Distribuire negli slot di distribuzione.

Prerequisiti

Prodotto Requisiti
Azure DevOps - Un'organizzazione e un progetto di Azure DevOps. Creane uno gratis.
Autorizzazioni - :
    - Per concedere l'accesso a tutte le pipeline nel progetto: devi essere membro del gruppo Project Administrators.
    - Per creare connessioni al servizio: è necessario avere il ruolo Amministratore o Creator per le connessioni al servizio.
- La possibilità di eseguire pipeline su agenti ospitati da Microsoft. È possibile acquistare un incarico parallelo oppure richiedere un piano gratuito.
GitHub - Un account GitHub.
Azzurro - Registro Azure Container. Creare un registro Azure Container se non ne è già disponibile uno.

Ottenere il codice

Effettua il fork della seguente app di esempio su 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 il modello di pipeline Docker: compilare ed eseguire il push di un'immagine nel Registro dei container di Azure .

    Screenshot della selezione del modello di pipeline Docker.

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

  6. Seleziona il tuo registro Contenitori dal menu a discesa, e poi seleziona Convalida e configura.

    Screenshot della schermata Convalida e configurazione di Docker.

  7. Esaminare il modello YAML della pipeline, quindi selezionare Salva ed esegui per compilare e pubblicare l'immagine Docker in 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 nel portale di Azure e quindi selezionare Repository.

    Screenshot dell'immagine Docker pubblicata nel Azure Container Registry.

  9. Per distribuire l'immagine dal registro contenitori, abilitare l'account utente amministratore. Passare al registro contenitori nel portale di Azure e selezionare Chiavi di accesso. Selezionare quindi il pulsante Attiva/Disattiva per Abilitare l'utente amministratore.

Creare un'app Web

  1. Accedere al portale di Azure.

  2. Selezionare Crea una risorsa>Contenitori e quindi scegliere App Web per contenitori.

    Screenshot della creazione di un'applicazione web per la risorsa container.

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

    Screenshot della configurazione dell'app Web.

  4. Nella sezione Piani tariffari selezionare 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

Configurare il contenitore app Web di Azure per avere più slot. Gli slot consentono di distribuire in modo sicuro l'app e testarla prima di renderla disponibile ai clienti. Per altre informazioni, 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 al portale di Azure e selezionare l'app Web per contenitori. Selezionare Impostazioniapplicazione> e quindi selezionare per visualizzare il valore.

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