Övning – Skapa en Azure DevOps-pipeline för att distribuera din molnbaserade app

Slutförd

Din chef vill att du ändrar CI/CD för företagets eShop-app så att den använder Azure Pipelines. Nu ska du skapa en Azure DevOps-pipeline för att skapa och distribuera din produkttjänst.

Skapa en Azure DevOps-pipeline

Viktigt!

Innan du börjar måste du ha ett Azure DevOps-konto. Om du inte har en kan du skapa en kostnadsfritt på dev.azure.com.

  1. Logga in på dev.azure.com.
  2. Välj + Nytt projekt.
  3. Som Projektnamn anger du eShop-distribution.
  4. Låt synligheten vara privat och välj Skapa.
  5. Till vänster väljer du Pipelines och sedan Skapa pipeline.
  6. På sidan Anslut, för Var är din kod?, väljer du GitHub.
  7. Logga in på GitHub om du uppmanas att göra det och ge Azure Pipelines åtkomst till ditt GitHub-konto.
  8. För Välj en lagringsplats väljer du din förgrenade lagringsplats.
  9. På sidan Konfigurera väljer du alternativet Distribuera till Azure Kubernetes Service .
  10. I fönstret Distribuera till Azure Kubernetes Service väljer du din Azure-prenumeration och väljer sedan Fortsätt.
  11. Logga in på din Azure-prenumeration om du uppmanas att göra det.
  12. För klustret väljer du det AKS-kluster som du skapade i föregående enhet aks-eshop.
  13. För namnområdet lämnar du Befintlig markerad och väljer sedan standard.
  14. För containerregistret väljer du det Azure Container Registry som du skapade i föregående enhet, till exempel acseshop186748394.
  15. För avbildningsnamnet anger du productservice.
  16. För tjänstporten anger du 8080.
  17. Välj Verifiera och konfigurera.

Granska YAML-pipelinefilen

Azure Pipelines använder YAML-filer för att definiera stegen för att skapa och distribuera din app. YAML-filen lagras på din GitHub-lagringsplats och skapades automatiskt åt dig, baserat på den information du angav.

Nu ska vi granska YAML-filen:

trigger:
- main

resources:
- repo: self

variables:

  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: '3bcbb23c-6fca-4ff0-8719-bfbdb64a89b1'
  imageRepository: 'productservice'
  containerRegistry: 'acseshop186748394.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildId)'
  imagePullSecret: 'acseshop18674839414442d34-auth'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'


stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: Build
    displayName: Build
    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)

    - upload: manifests
      artifact: manifests

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build

  jobs:
  - deployment: Deploy
    displayName: Deploy
    pool:
      vmImage: $(vmImageName)
    environment: 'PhilStollerymod9cloudnativeexercisecode-1959.default'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)

          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

Avsnitten utlösare och resurser definierar när pipelinen ska köras. I det här fallet körs pipelinen när en ändring checkas in på huvudgrenen för lagringsplatsen.

Avsnittet variabler definierar de variabler som används i pipelinen. Variablerna används för att definiera Azure Container Registry och Den Dockerfile som ska användas.

YAML definierar sedan ett build-jobb som använder den senaste ubuntu-agenten. Jobbet använder Docker-uppgiften för att skapa och skicka avbildningen till Azure Container Registry.

Det sista steget är att distribuera den uppdaterade produkttjänsten till AKS. Jobbet använder KubernetesManifest-uppgiften för att distribuera avbildningen till AKS.

Köra pipelinen

Längst upp till höger på yaml-sidan Granska din pipeline väljer du Spara och kör. I fönstret Spara och kör:

  1. Välj Skapa en ny gren för den här incheckningen.
  2. Låt alla andra alternativ vara inställda på standardinställningarna.
  3. Välj Spara och kör.

Övervaka och felsöka pipelinen

Azure Pipelines övervakas och hanteras från Azure DevOps-portalen. Nu ska vi titta på utdata från körningen av pipelinen som du skapade.

A screenshot showing the status of an Azure Pipeline.

Sammanfattningssidan visar alla faser i pipelinen som körs. Du kan välja en fas för att visa stegen mer detaljerat. Om en stund ser du att pipelinen har misslyckats. Välj fasen Skapa.

A screenshot of the build stage in a pipeline that has failed.

I byggfasen kan du se att bygget har misslyckats. Välj steget Skapa och skicka en avbildning till Azure Container Registry . Felet i loggfilen visar:

##[error]Unhandled: No Dockerfile matching  /home/vsts/work/1/s/**/Dockerfile  was found.

Åtgärda felet

Gå tillbaka till sammanfattningssidan för pipelinen i DevOps. Du kommer att redigera den skapade pipelinen för att åtgärda felet.

  1. Längst upp till höger väljer du menyn Fler åtgärder och väljer sedan Redigera pipeline.

  2. Rad 17 i YAML-filen definierar den Dockerfile som ska användas, och som standard förväntar sig pipelinen att det finns en fil med namnet Dockerfile i lagringsplatsens rot.

    eShop använder en annan docker-fil för produkttjänsten med namnet DockerfileProducts. Redigera rad 17 så att den blir:

      dockerfilePath: '**/DockerfileProducts'
    
  3. Välj Spara.

  4. I fönstret Spara väljer du Spara.

  5. Välj Kör och välj sedan Kör i fönstret Kör pipeline.

    Se byggsteget vara klart. Fasen Distribuera pausar tills du väljer den och tillåter att den körs.

    A screenshot showing the completed pipeline.

    Pipelinen har slutförts. Välj steget Distribuera för att visa stegen.

    A screenshot showing the Deploy stage and the successfully completed steps.