Condividi tramite


Eseguire la distribuzione di un contenitore personalizzato nel servizio app usando Azure Pipelines

Azure DevOps consente di ospitare, compilare, pianificare e testare il codice con flussi di lavoro gratuiti. Tra questi, Azure Pipelines consente di distribuire l'applicazione con CI/CD funzionante con qualsiasi piattaforma e cloud. Una pipeline è definita come file YAML nella directory radice del repository.

In questo articolo si usa Azure Pipelines per distribuire un'applicazione contenitore Windows nel servizio app da un repository Git in Azure DevOps. Si presume che l'utente abbia già un'applicazione .NET con un dockerfile di supporto in Azure DevOps.

Prerequisiti

Aggiungere una connessione al servizio

Prima di creare la pipeline, è necessario creare la connessione al servizio perché durante la creazione del modello viene chiesto di scegliere e verificare la connessione. Una connessione al servizio consente di connettersi al Registro di sistema a scelta (ACR o Docker Hub) quando si usano i modelli di attività. Quando si aggiunge una nuova connessione al servizio, scegliere l'opzione Registro Docker. Il modulo seguente chiede di scegliere tra Docker Hub o Registro Azure Container, insieme alle informazioni relative. Per seguire questa esercitazione, usare Registro Azure Container. È possibile creare una nuova connessione al servizio seguendo le istruzioni riportate qui.

Proteggere i segreti

Poiché si usano informazioni sensibili a cui non si vuole che altri utenti abbiano accesso, sono usate variabili per proteggere le informazioni. Creare una variabile seguendo le istruzioni riportate qui.

Per aggiungere una variabile, fare clic sul pulsante Variabili accanto al pulsante Salva in alto a destra nella visualizzazione di modifica per la pipeline. Selezionare il pulsante Nuova variabile e immettere le informazioni. Aggiungere le variabili seguenti con i propri segreti appropriati da ogni risorsa.

  • vmImageName: 'windows-latest'
  • imageRepository: 'your-image-repo-name'
  • dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
  • dockerRegistryServiceConnection: 'your-service-connection-number'

Crea una nuova pipeline

Dopo aver creato il repository con l'applicazione .NET e il dockerfile di supporto, seguire la procedura per creare la pipeline.

  1. Passare a Pipelines sulla barra dei menu a sinistra e fare clic sul pulsante Crea pipeline
  2. Nella schermata successiva selezionare Azure Repos Git come opzione del repository e selezionare il repository in cui si trova il codice
  3. Nella scheda Configura scegliere l'opzione Pipeline di base
  4. Nella scheda Revisione successiva fare clic sul pulsante Salva

Creare ed eseguire il push di un'immagine nel Registro Azure Container

Dopo aver creato e salvato la pipeline, sarà necessario modificarla per eseguire i passi per la compilazione del contenitore, il push in un registro e la distribuzione dell'immagine nel servizio app. Per iniziare, passare al menu Pipelines, scegliere la pipeline creata e fare clic sul pulsante Modifica.

Prima di tutto è necessario aggiungere l'attività Docker in modo da poter compilare l'immagine. Aggiungere il codice seguente e sostituire il Dockerfile: app/Dockerfile con il percorso al Dockerfile.

trigger:
 - main

 pool:
   vmImage: 'windows-latest' 

 variables:
   vmImageName: 'windows-latest'
   imageRepository: 'your-image-repo-name'
   dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
   dockerRegistryServiceConnection: 'your-service-connection-number'

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    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)

Aggiungere l'attività di distribuzione del servizio app

Successivamente, è necessario configurare l'attività di distribuzione. Questo richiede il nome della sottoscrizione, il nome dell'applicazione e il registro contenitori. Aggiungere una nuova fase al file YAML incollando il codice seguente.

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:

Passare quindi alla scheda Mostra assistente nell'angolo in alto a destra e individuare l'attività di distribuzione del servizio app di Azure, quindi compilare il modulo seguente:

  • Tipo di connessione: Azure Resource Manager
  • Sottoscrizione di Azure: your-subscription-name
  • Tipo di servizio app: app Web per contenitori (Windows)
  • Nome servizio app: your-app-name
  • Registro di sistema o spazio dei nomi: your-azure-container-registry-namespace
  • Immagine: your-azure-container-registry-image-name

Dopo aver compilato questi elementi, fare clic sul pulsante Aggiungi per aggiungere l'attività seguente:

- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'my-subscription-name'
    appType: 'webAppHyperVContainer'
    WebAppName: 'my-app-name'
    DockerNamespace: 'myregsitry.azurecr.io'
    DockerRepository: 'dotnetframework:12'

Dopo aver aggiunto l'attività, la pipeline è pronta per l'esecuzione. Fare clic sul pulsante Convalida e salva ed eseguire la pipeline. La pipeline esegue i passaggi per compilare ed eseguire il push dell'immagine del contenitore di Windows in Registro Azure Container e distribuire l'immagine nel servizio app.

Di seguito è riportato l'esempio del file YAML completo:

trigger:
 - main

 pool:
   vmImage: 'windows-latest' 

 variables:
   vmImageName: 'windows-latest'
   imageRepository: 'your-image-repo-name'
   dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
   dockerRegistryServiceConnection: 'your-service-connection-number'

- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build job
    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)

- stage: Deploy
  displayName: Deploy to App Service
  jobs:
  - job: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: AzureRmWebAppDeployment@4
		  inputs:
		    ConnectionType: 'AzureRM'
		    azureSubscription: 'my-subscription-name'
		    appType: 'webAppHyperVContainer'
		    WebAppName: 'my-app-name'
		    DockerNamespace: 'myregsitry.azurecr.io'
		    DockerRepository: 'dotnetframework:12'