Øvelse – Opret en Azure DevOps-pipeline for at udrulle din oprindelige app i cloudmiljøet

Fuldført

Din chef ønsker, at du ændrer CI/CD'en for firmaers eShop-app, så den bruger Azure Pipelines. Du skal nu oprette en Azure DevOps Pipeline for at bygge og udrulle din produkttjeneste.

Opret en Azure DevOps-pipeline

Important

Før du begynder, skal du have en Azure DevOps-konto. Hvis du ikke har en, kan du oprette en gratis på dev.azure.com.

  1. Log ind på dev.azure.com.
  2. Vælg + Nyt projekt.
  3. For Projektnavn skal du angive eShop-installation.
  4. Lad Synlighed være indstillet til Privat, og vælg Opret.
  5. Vælg Pipelines til venstre, og vælg derefter Opret pipeline.
  6. siden Opret forbindelse skal du vælge GitHub for Hvor er din kode?.
  7. Hvis du bliver bedt om det, skal du logge på GitHub og give Azure Pipelines tilladelse til at få adgang til din GitHub-konto.
  8. For Vælg et lagerskal du vælge dit kopierede lager.
  9. På siden Konfigurer skal du vælge indstillingen Udrul til Azure Kubernetes Service .
  10. I ruden Udrul på Azure Kubernetes Service skal du vælge dit Azure-abonnement og derefter vælge Fortsæt.
  11. Hvis du bliver bedt om det, skal du logge på dit Azure-abonnement.
  12. For Klyngen skal du vælge den AKS-klynge, du oprettede i den forrige enhed aks-eshop.
  13. For navneområdet skal du lade Eksisterende være markeret og derefter vælge standard.
  14. For Container-registreringsdatabasen skal du vælge den Azure Container Registry, du oprettede i den forrige enhed, f.eks. acseshop186748394.
  15. For Billednavn skal du angive productservice.
  16. For serviceporten skal du indtaste 8080.
  17. Vælg Valider og konfigurer.

Gennemse YAML-pipelinefilen

Azure Pipelines bruger YAML-filer til at definere trinnene til oprettelse og installation af din app. YAML-filen gemmes i dit GitHub-lager og blev oprettet automatisk for dig på baggrund af de oplysninger, du har angivet.

Lad os gennemse 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)

Afsnittene Udløser og Ressourcer definerer, hvornår pipelinen skal køre. I dette tilfælde kører pipelinen, når en ændring er bekræftet til hovedgrenen i dit lager.

Afsnittet Variabler definerer de variabler, der bruges i pipelinen. Variablerne bruges til at definere Azure Container Registry og den Dockerfile, der skal bruges.

YAML definerer derefter et build-job , der bruger ubuntu-latest agenten. Jobbet bruger Docker-opgaven til at oprette og pushe billedet til Azure Container Registry.

Den sidste fase er at installere den opdaterede produkttjeneste til AKS. Jobbet bruger KubernetesManifest-opgaven til at udrulle afbildningen til AKS.

Kør pipelinen

Øverst til højre på siden Gennemse yaml-pipelinen skal du vælge Gem og kør. I ruden Gem og kør:

  1. Vælg Opret en ny forgrening for denne bekræftelse.
  2. Lad alle de andre indstillinger være angivet til deres standarder.
  3. Vælg Gem og kør.

Overvåg og foretag fejlfinding af pipelinen

Azure Pipelines overvåges og administreres fra Azure DevOps-portalen. Lad os se på resultatet af at køre den pipeline, du har oprettet.

Et skærmbillede, der viser status for en Azure Pipeline.

Oversigtssiden viser alle faserne i din løbende pipeline. Du kan vælge en fase for at få vist trinnene mere detaljeret. Om et øjeblik kan du se, at pipelinen mislykkedes. Vælg fasen Opbyg .

Et skærmbillede af buildfasen i en pipeline, der mislykkedes.

I buildfasen kan du se, at buildet mislykkedes. Vælg trinnet Opret, og send et billede til Azure Container Registry trin. Fejlen i logfilen viser:

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

Ret fejlen

I DevOps skal du gå tilbage til siden med pipelineoversigten. Du skal redigere den oprettede pipeline for at rette fejlen.

  1. Vælg menuen Flere handlinger øverst til højre, og vælg derefter Rediger pipeline.

  2. Linje 17 i YAML-filen definerer den Dockerfile, der skal bruges, og som standard forventer pipelinen, at der er en fil med navnet Dockerfile i roden af lageret.

    eShop bruger en anden docker-fil til produkttjenesten med navnet DockerfileProducts. Rediger linje 17, så den er:

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. Vælg Gem.

  4. I ruden Gem skal du vælge Gem.

  5. Vælg Kør, og vælg derefter Kør i ruden Kør pipeline.

    Se Build-fasen færdig. Fasen Implementer afbrydes midlertidigt, indtil du vælger den og tillader den at køre.

    Et skærmbillede, der viser den fuldførte pipeline.

    Pipelinen er fuldført. Vælg fasen Installer for at få vist trinnene.

    Et skærmbillede, der viser fasen Udrul og de fuldførte trin.