Oefening: een Azure DevOps-pijplijn maken om uw cloudeigen app te implementeren

Voltooid

Uw manager wil dat u de CI/CD voor de eShop-app van bedrijven wijzigt om Azure Pipelines te gebruiken. U gaat nu een Azure DevOps-pijplijn maken om uw productenservice te bouwen en te implementeren.

Een Azure DevOps-pijplijn maken

Belangrijk

Voordat u begint, moet u een Azure DevOps-account hebben. Als u er nog geen hebt, kunt u er gratis een maken op dev.azure.com.

  1. Meld u aan bij dev.azure.com.
  2. Selecteer + Nieuw project.
  3. Voer eShop-implementatie in als projectnaam.
  4. Laat de zichtbaarheid ingesteld op Privé en selecteer Maken.
  5. Selecteer aan de linkerkant Pijplijnen en selecteer Vervolgens Pijplijn maken.
  6. Selecteer GitHub op de pagina Verbinding maken, voor Waar is uw code?.
  7. Meld u aan bij GitHub en autoriseren Azure Pipelines om toegang te krijgen tot uw GitHub-account als u hierom wordt gevraagd.
  8. Selecteer uw gesplitste opslagplaats voor Een opslagplaats selecteren.
  9. Selecteer op de pagina Configureren de optie Implementeren naar Azure Kubernetes Service .
  10. Selecteer uw Azure-abonnement in het deelvenster Implementeren in Azure Kubernetes Service en selecteer vervolgens Doorgaan.
  11. Meld u aan bij uw Azure-abonnement als u hierom wordt gevraagd.
  12. Selecteer voor het cluster het AKS-cluster dat u in de vorige les aks-eshop hebt gemaakt.
  13. Voor de naamruimte laat u Bestaande geselecteerd en selecteert u vervolgens de standaardwaarde.
  14. Selecteer voor het containerregister het Azure Container Registry dat u in de vorige eenheid hebt gemaakt, bijvoorbeeld acseshop186748394.
  15. Voer de productservice in als naam van de installatiekopieën.
  16. Voer 8080 in voor de servicepoort.
  17. Selecteer Valideren en configureren.

Het YAML-bestand van de pijplijn controleren

Azure Pipelines maakt gebruik van YAML-bestanden om de stappen te definiëren voor het bouwen en implementeren van uw app. Het YAML-bestand wordt opgeslagen in uw GitHub-opslagplaats en is automatisch voor u gemaakt op basis van de informatie die u hebt opgegeven.

Laten we het YAML-bestand bekijken:

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)

De secties trigger en resources definiëren wanneer de pijplijn moet worden uitgevoerd. In dit geval wordt de pijplijn uitgevoerd wanneer een wijziging wordt doorgevoerd in de hoofdbranch van uw opslagplaats.

In de sectie variabelen worden de variabelen gedefinieerd die in de pijplijn worden gebruikt. De variabelen worden gebruikt voor het definiëren van Azure Container Registry en het Dockerfile dat moet worden gebruikt.

De YAML definieert vervolgens een build-taak die gebruikmaakt van de meest recente ubuntu-agent. De taak maakt gebruik van de Docker-taak om de installatiekopieën te bouwen en naar Azure Container Registry te pushen.

De laatste fase is het implementeren van de bijgewerkte productservice naar AKS. De taak maakt gebruik van de KubernetesManifest-taak om de installatiekopieën te implementeren in AKS.

De pijplijn uitvoeren

Selecteer opslaan en uitvoeren in de rechterbovenhoek van de yamL-pagina Uw pijplijn controleren. In het deelvenster Opslaan en uitvoeren:

  1. Selecteer Een nieuwe vertakking maken voor deze doorvoering.
  2. Laat alle andere opties ingesteld op de standaardinstellingen.
  3. Selecteer Opslaan en uitvoeren.

De pijplijn bewaken en problemen oplossen

Azure Pipelines worden bewaakt en beheerd vanuit de Azure DevOps-portal. Laten we eens kijken naar de uitvoer van het uitvoeren van de pijplijn die u hebt gemaakt.

A screenshot showing the status of an Azure Pipeline.

Op de overzichtspagina ziet u alle fasen van de actieve pijplijn. U kunt een fase selecteren om de stappen gedetailleerder weer te geven. Op een moment ziet u dat de pijplijn is mislukt. Selecteer de buildfase .

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

In de buildfase ziet u dat de build is mislukt. Selecteer de stap Een installatiekopieën bouwen en pushen naar Azure Container Registry . De fout in het logboekbestand toont:

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

De fout oplossen

Ga in DevOps terug naar de overzichtspagina van de pijplijn. U gaat de gemaakte pijplijn bewerken om de fout op te lossen.

  1. Selecteer rechtsboven het menu Meer acties en selecteer vervolgens Pijplijn bewerken.

  2. Regel 17 van het YAML-bestand definieert het Te gebruiken Dockerfile. Standaard verwacht de pijplijn dat er een bestand met de naam Dockerfile in de hoofdmap van de opslagplaats staat.

    De eShop maakt gebruik van een ander Docker-bestand voor de productservice DockerfileProducts. Regel 17 bewerken als:

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. Selecteer Opslaan.

  4. Selecteer Opslaan in het deelvenster Opslaan.

  5. Selecteer Vervolgens Uitvoeren in het deelvenster Pijplijn uitvoeren de optie Uitvoeren.

    Bekijk hoe de buildfase is voltooid. De implementatiefase wordt onderbroken totdat u deze selecteert en deze mag worden uitgevoerd.

    A screenshot showing the completed pipeline.

    De pijplijn is voltooid. Selecteer de implementatiefase om de stappen weer te geven.

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