Övning – Distribuera en Docker-container till Azure

Slutförd

Projektet kom med en publiceringspipeline som bygger projekten i lösningen och distribuerar webbappen till dess "App Service." Nu är det dags att uppdatera pipeline-versionen och distribuera projektet som en container i stället.

I den här lektionen gör du följande:

  • Definiera några pipelinevariabler för att göra pipeline:n enklare att underhålla.
  • Ersätt befintliga Build-uppgifter med en enhetlig uppgift för att skapa och push-överföra en Docker-container.
  • Ersätt den befintliga Distribuera uppgift med en som uppdaterar App Service-webbappen med den nya containeravbildningen.
  • Spara pipelinen för att utlösa en bygg och en release.

Definiera variabler som ska delas i pipelinen

Här lägger du till en ny pipelinevariabel i din befintliga YAML-pipeline som definierats i azure-pipelines.yml.

  1. Från Azure DevOps navigerar du till Pipelines.

  2. Välj pipelinen.

  3. Välj Redigera. Kontrollera att grenen är inställd på huvud genom att välja den i den nedrullningsbara menyn. Detta öppnar din azure-pipelines.yml-fil.

  4. Lägg till den markerade raden nedan för att lägga till en pipelinevariabler med namnet webRepository och tag. Dessa används i flera uppgifter för att unikt identifiera den specifika versionen av containern som refereras till. Du kan också ta bort variabeln buildConfiguration. Du behöver den inte längre.

    trigger:
    - '*'
    
    variables:
      buildConfiguration: 'Release'
      webRepository: 'web'
      tag: '$(Build.BuildId)'
    

Ersätt byggstegsaktiviteterna

Andy: jag tror inte att vi behöver någon av dessa bygguppgifter längre, eftersom Dockerfile i projektmappen redan definierar den version vi vill ha. Men jag har inte haft chansen att se vad vi kan använda för att skapa avbildningen med hjälp av en Dockerfile ännu. Några idéer?

Mara: Jag kollade precis upp det. Det verkar som att du bör kunna skapa containern och till och med pusha den till lagringsplatsen med ett enda steg. Nu ska vi lägga till den.

Docker-uppgift

Du kan använda Docker-uppgiften för att skapa och distribuera Docker-avbildningar. Ersätt hela Build-fasen med YAML-kodfragmentet nedan.

  • kommando: Anger det Docker-kommando som ska köras.
  • buildContext: Anger sökvägen till byggkontexten.
  • lagringsplats: Anger namnet på lagringsplatsen.
  • dockerfile: Anger sökvägen till Dockerfile.
  • containerRegistry: Anger namnet på Docker-registertjänstanslutningen.
  • taggar: Anger en lista med taggar på separata rader. Dessa taggar används i kommandona build, push och buildAndPush.
- stage: 'Build'
  displayName: 'Build and push'
  jobs:  
  - job: 'Build'
    displayName: 'Build job'
    pool:
      vmImage: 'ubuntu-20.04'
    steps:
    - task: Docker@2
      displayName: 'Build and push the image to container registry'
      inputs:
        command: buildAndPush
        buildContext: $(Build.Repository.LocalPath)
        repository: $(webRepository)
        dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
        containerRegistry: 'Container Registry Connection'
        tags: |
          $(tag)

Ersätt uppgiften i distributionssteget

Andy: Tja, det verkar ganska enkelt. Nu behöver vi bara hitta en uppgift som instruerar App Service att använda den nyligen överförda versionen av containerbilden.

Mara: jag är redan på det. Det skiljer sig lite från att leverera en build till Azure Pipelines, men ändå tillräckligt enkel för att jobbet ska kunna utföras i ett enda steg. Nu ska vi lägga till den.

Azure webbapplikation för containeruppgifter

Uppgiften Azure Web App for Container är utformad för att distribuera Docker-containrar till Azure App Service. Ersätt hela Distribuera-fasen med YAML-kodfragmentet nedan.

  • appName: Anger namnet på en befintlig Azure App Service.
  • azureSubscription: Anger namnet på Azure Resource Manager-prenumerationen för distributionen.
  • imageName: Anger det fullständigt kvalificerade containeravbildningsnamnet. till exempel myregistry.azurecr.io/nginx:latest eller python:3.7.2-alpine/.
- stage: 'Deploy'
  displayName: 'Deploy the container'
  dependsOn: Build
  jobs:
  - job: 'Deploy'
    displayName: 'Deploy job'
    pool:
      vmImage: 'ubuntu-20.04'
    variables:
    - group: Release
    steps:
    - task: AzureWebAppContainer@1
      inputs:
       appName: $(WebAppName)
       azureSubscription: 'Resource Manager - Tailspin - Space Game'
       imageName: $(RegistryName)/$(webRepository):$(build.buildId)

Spara pipelinen för att utlösa en version och version

  1. Välj Spara i det övre högra hörnet på sidan. Skriv incheckningsmeddelandet och välj Spara för att bekräfta.

  2. Välj Köroch se till att grenen är inställd på main. Välj Kör när du är klar.

  3. Välj din pipeline för att visa loggarna. När bygget har slutförts väljer du uppgiften AzureWebAppContainer och väljer sedan App Service Application URL för att visa din distribuerade webbapp.

    Skärmbild av Azure Pipelines som visar platsen för webbplatsens URL.

  4. Du bör se din webbapp köra på App Service.

    Skärmbild av webbplatsen för Space Game.

Andy: Det här blev bra! Jag tror att använda containrar kan vara en stor vinst för vårt team.