Øvelse – Opprett et Azure DevOps-datasamlebånd for å distribuere den skybaserte appen

Fullført

Lederen din vil at du skal endre CI/CD-en for bedriftens eShop-app til å bruke Azure Pipelines. Nå oppretter du en Azure DevOps Pipeline for å bygge og distribuere produkttjenesten.

Opprett en Azure DevOps Pipeline

Important

Før du begynner, må du ha en Azure DevOps-konto. Hvis du ikke har en, kan du opprette en gratis på dev.azure.com.

  1. Logg på dev.azure.com.
  2. Velg + Nytt prosjekt.
  3. Som prosjektnavn angir du eShop-distribusjon.
  4. La Synlighet være satt til Privat, og velg Opprett.
  5. Velg Pipeliner til venstre, og velg deretter Opprett pipeline.
  6. Velg GitHub for Hvor er koden din på Koble til-siden.
  7. Hvis du blir bedt om det, logger du på GitHub og godkjenner Azure Pipelines for å få tilgang til GitHub-kontoen din.
  8. Velg det forgrenede repositoriet for Velg et repositorium.
  9. Konfigurer-siden velger du alternativet Distribuer til Azure Kubernetes Service .
  10. Velg Azure-abonnementet i ruten Distribuer til Azure Kubernetes-tjenesten , og velg deretter Fortsett.
  11. Hvis du blir bedt om det, logger du på Azure-abonnementet.
  12. For Klyngen velger du AKS-klyngen du opprettet i den forrige enheten aks-eshop.
  13. La Eksisterende være merket av for navneområdet, og velg deretter standard.
  14. For Container Registry velger du Azure Container Registry du opprettet i den forrige enheten, for eksempel acseshop186748394.
  15. For bildenavnet angir du productservice.
  16. For serviceporten skriver du inn 8080.
  17. Velg Valider, og konfigurer.

Se gjennom YAML-datasamlebåndfilen

Azure Pipelines bruker YAML-filer til å definere trinnene for å bygge og distribuere appen. YAML-filen lagres i GitHub-repositoriet og ble opprettet automatisk for deg, basert på informasjonen du oppgav.

La oss se gjennom 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øser- og ressursdelene definerer når pipelinen skal kjøres. I dette tilfellet kjører datasamlebåndet når en endring er forpliktet til hovedgrenen av repositoriet.

Variabeldelen definerer variablene som brukes i pipelinen. Variablene brukes til å definere Azure Container Registry og Dockerfile som skal brukes.

YAML definerer deretter en Build-jobb som bruker ubuntu-latest-agenten. Jobben bruker Docker-oppgaven til å bygge og sende bildet til Azure Container Registry.

Den siste fasen er å distribuere den oppdaterte produkttjenesten til AKS. Jobben bruker KubernetesManifest-oppgaven til å distribuere avbildningen til AKS.

Kjør datasamlebåndet

Velg Lagre og kjør øverst til høyre på SIDEN Se gjennom datasamlebåndet yaml. I Lagre og kjør-ruten:

  1. Velg Opprett en ny gren for denne utførelsen.
  2. La alle de andre alternativene være satt til standardinnstillingene.
  3. Velg Lagre og kjør.

Overvåke og feilsøke datasamlebåndet

Azure Pipelines overvåkes og administreres fra Azure DevOps-portalen. La oss se på utdataene for å kjøre datasamlebåndet du opprettet.

Et skjermbilde som viser statusen for en Azure Pipeline.

Sammendragssiden viser deg alle fasene i det løpende datasamlebåndet. Du kan velge en fase for å vise trinnene mer detaljert. Om et øyeblikk ser du at datasamlebåndet har mislyktes. Velg Bygg-fasen .

Et skjermbilde av byggefasen i et datasamlebånd som har mislyktes.

I byggefasen kan du se at bygget mislyktes. Velg bygg og skyv et bilde til Azure Container Registry-trinnet . Feilen i loggfilen viser:

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

Rette feilen

Gå tilbake til sammendragssiden for datasamlebåndet i DevOps. Du skal redigere det opprettede datasamlebåndet for å løse feilen.

  1. Velg Flere handlinger-menyen øverst til høyre, og velg deretter Rediger pipeline.

  2. Linje 17 i YAML-filen definerer Dockerfile som skal brukes, og som standard forventer pipelinen at det er en fil med navnet Dockerfile i roten av repositoriet.

    eShop bruker en annen docker-fil for produkttjenesten kalt DockerfileProducts. Rediger linje 17 som skal være:

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. Velg Lagre.

  4. I Lagre-ruten velger du Lagre.

  5. Velg Kjør, og velg deretter Kjør i Kjør pipeline-ruten.

    Se Build-fasen fullføres. Distribuer-fasen stanser midlertidig til du velger den og lar den kjøre.

    Et skjermbilde som viser det fullførte datasamlebåndet.

    Datasamlebåndet er fullført. Velg Distribuer-fasen for å vise trinnene.

    Et skjermbilde som viser Distribusjon-fasen og trinnene som er fullført.