Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 kostnadsfritt.
- 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 din pipeline. 
- 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 skicka avbildning till Azure Container Registry
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å 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
 
- Klicka 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'