Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Azure DevOps consente di ospitare, compilare, pianificare e testare il codice con flussi di lavoro gratuiti. Utilizzare Azure Pipelines come uno di questi workflow consente di distribuire la propria applicazione con CI/CD che funziona 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
- Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
- Un'organizzazione di Azure DevOps. Crearne una gratuitamente.
- Un'app di Windows funzionante con Dockerfile ospitato in Azure Repos.
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, utilizzare Azure Container Registry. È possibile creare una nuova connessione al servizio seguendo le istruzioni riportate qui.
Metti al sicuro i tuoi 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 della visualizzazione di modifica per la pipeline.
Selezionare il pulsante Nuova variabile e immettere le informazioni. Aggiungere le variabili seguenti con i propri segreti adatti a ciascuna risorsa.
- vmImageName: 'windows-latest'
- imageRepository: 'your-image-repo-name'
- dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
- dockerRegistryServiceConnection: 'il-tuo-numero-di-connessione-del-servizio'
Creare una nuova pipeline
Dopo aver creato il repository con l'applicazione .NET e il dockerfile di supporto, seguire la procedura per creare la pipeline.
- Passare a Pipelines sulla barra dei menu a sinistra e fare clic sul pulsante Crea pipeline
- Nella schermata successiva selezionare Azure Repos Git come opzione del repository e selezionare il repository in cui si trova il codice
- Nella scheda Configura scegliere l'opzione Pipeline di base
- Nella scheda Revisione successiva fare clic sul pulsante Salva
Crea e pubblica l'immagine al Registro dei Container di Azure
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 del 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 di 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 alla scheda Mostra assistente nell'angolo in alto a destra e individuare l'attività di distribuzione del servizio app di Azure e 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 dell'App Service: your-app-name
- Registro o spazio dei nomi: your-azure-container-registry-namespace
- Immagine: your-azure-container-registry-image-name
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 costruire e trasferire l'immagine del contenitore di Windows nel Registro Container di Azure e distribuire l'immagine su App Service.
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'