Övning – Skapa en Azure DevOps-pipeline för att distribuera din molnbaserade app
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
Viktig
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.
- Logga in på dev.azure.com.
 - Välj + Nytt projekt.
 - För Project-namnetanger du eShop-distribution.
 - Låt synligheten vara privat och välj Skapa.
 - Till vänster väljer du Pipelines och sedan Skapa pipeline.
 - På sidan Connectför Var är koden?väljer du GitHub.
 - Logga in på GitHub om du uppmanas att göra det och ge Azure Pipelines åtkomst till ditt GitHub-konto.
 - För Välj en lagringsplatsväljer du din förgrenade lagringsplats.
 - På sidan Konfigurera väljer du alternativet Distribuera till Azure Kubernetes Service.
 - I fönstret Distribuera till Azure Kubernetes Service väljer du din Azure-prenumeration och väljer sedan Fortsätt.
 - Logga in på din Azure-prenumeration om du uppmanas att göra det.
 - För Clusterväljer du det AKS-kluster som du skapade i föregående enhet aks-eshop.
 - För namnområdet lämnar du Befintlig markerad och väljer sedan standard.
 - För containerregistret väljer du det Azure Container Registry som du skapade i föregående enhet, till exempel acseshop186748394.
 - För bildnamnetanger du productservice.
 - För Service Portanger du 8080.
 - 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)
utlösare och resurser avsnitten 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 variablerna som används i pipelinen. Variablerna används för att ange Azure Container Registry och dockerfile att använda.
YAML definierar sedan ett Build-jobb som använder ubuntu-senaste agent. Jobbet använder Docker-tasken för att bygga och skicka avbildningen till Azure Container Registry.
Det sista steget är att Distribuera den uppdaterade produkttjänsten till AKS. Jobbet använder KubernetesManifest uppgift för att distribuera avbildningen till AKS.
Kör den pipeline
I det övre högra hörnet på sidan Granska din YAML-pipeline, välj Spara och kör. I fönstret Spara och kör:
- Välj Skapa en ny gren för den här commit.
 - Låt alla andra alternativ vara inställda på standardinställningarna.
 - 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.
Sammanfattningssidan visar dig alla steg i din körande pipeline. 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 Build.
I byggfasen kan du se att bygget har misslyckats. Välj Skapa och skicka en avbildning till Azure Container Registry steg. 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.
Längst upp till höger väljer du menyn Fler åtgärder och väljer sedan Redigera pipeline.
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.acr'Välj Spara.
I fönstret Spara väljer du Spara.
Välj Kör och välj sedan Köri fönstret Kör pipeline .
Titta på när byggfasen slutförs. Deploy-fasen pausas tills du väljer den och tillåter att den körs.
Pipelinen har slutförts framgångsrikt. Välj fasen Distribuera för att visa stegen.