Distribuera en anpassad container till App Service med Hjälp av Azure Pipelines
Med Azure DevOps kan du vara värd för, skapa, planera och testa din kod med kostnadsfria arbetsflöden. Med Azure Pipelines som ett av dessa arbetsflöden kan du distribuera ditt program med CI/CD som fungerar med alla plattformar och moln. En pipeline definieras som en YAML-fil i rotkatalogen på lagringsplatsen.
I den här artikeln använder vi Azure Pipelines för att distribuera ett Windows-containerprogram till App Service från en Git-lagringsplats i Azure DevOps. Det förutsätter att du redan har ett .NET-program med en stöd dockerfile i Azure DevOps.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- En Azure DevOps-organisation. Skapa en kostnadsfritt.
- En fungerande Windows-app med Dockerfile som finns på Azure Repos.
Lägga till en tjänstanslutning
Innan du skapar din pipeline bör du först skapa tjänstanslutningen eftersom du uppmanas att välja och verifiera anslutningen när du skapar mallen. Med en tjänstanslutning kan du ansluta till ditt valfritt register (ACR eller Docker Hub) när du använder uppgiftsmallarna. När du lägger till en ny tjänstanslutning väljer du alternativet Docker Registry. I följande formulär uppmanas du att välja Docker Hub eller Azure Container Registry tillsammans med tillhörande information. Om du vill följa med i den här självstudien använder du Azure Container Registry. Du kan skapa en ny tjänstanslutning enligt anvisningarna här.
Skydda dina hemligheter
Eftersom vi använder känslig information som du inte vill att andra ska komma åt använder vi variabler för att skydda vår information. Skapa en variabel genom att följa anvisningarna här.
Om du vill lägga till en variabel klickar du på knappen Variabler bredvid knappen Spara längst upp till höger i redigeringsvyn för pipelinen. Välj knappen Ny variabel och ange din information. Lägg till variablerna nedan med dina egna hemligheter som är lämpliga för varje resurs.
- vmImageName: "windows-latest"
- imageRepository: "your-image-repo-name"
- dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
- dockerRegistryServiceConnection: "your-service-connection-number"
Skapa en ny pipeline
När lagringsplatsen har skapats med .NET-programmet och stöd för dockerfile kan du skapa din pipeline genom att följa dessa steg.
- Navigera till Pipelines på den vänstra menyraden och klicka på knappen Skapa pipeline
- På nästa skärm väljer du Azure Repos Git som lagringsplatsalternativ och väljer lagringsplatsen där koden finns
- Under fliken Konfigurera väljer du alternativet Startpipeline
- Under nästa fliken Granska klickar du på knappen Spara
Skapa och push-överföra avbildning till Azure-containerregistret
När pipelinen har skapats och sparats måste du redigera pipelinen för att köra stegen för att skapa containern, push-överföra till ett register och distribuera avbildningen till App Service. Börja genom att gå till menyn Pipelines , välja din pipeline som du skapade och klicka på knappen Redigera .
Först måste du lägga till docker-uppgiften så att du kan skapa avbildningen. Lägg till följande kod och ersätt Dockerfile: app/Dockerfile med sökvägen till din 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)
Lägg till App Service-distributionsuppgiften
Därefter måste du konfigurera distributionsuppgiften. Detta kräver ditt prenumerationsnamn, programnamn och containerregister. Lägg till en ny fas i yaml-filen genom att klistra in koden nedan.
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
Gå sedan till fliken Visa assistent i det övre högra hörnet och leta reda på azure App Service-distributionsuppgiften och fyll i följande formulär:
- Anslutningstyp: Azure Resource Manager
- Azure-prenumeration: ditt prenumerationsnamn
- App Service-typ: Web App for Containers (Windows)
- App Service-namn: ditt-app-namn
- Register eller namnområde: your-azure-container-registry-namespace
- Bild: your-azure-container-registry-image-name
När du har fyllt i dem klickar du på knappen Lägg till för att lägga till uppgiften nedan:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'
När du har lagt till uppgiften är pipelinen redo att köras. Klicka på knappen Verifiera och spara och kör pipelinen. Pipelinen går igenom stegen för att skapa och skicka Windows-containeravbildningen till Azure Container Registry och distribuera avbildningen till App Service.
Nedan visas exemplet på den fullständiga yaml-filen:
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'