Dela via


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

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.

  1. Navigera till Pipelines på den vänstra menyraden och klicka på knappen Skapa pipeline
  2. På nästa skärm väljer du Azure Repos Git som lagringsplatsalternativ och väljer lagringsplatsen där koden finns
  3. Under fliken Konfigurera väljer du alternativet Startpipeline
  4. 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'