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. Voor het project met de naam, voer de eShop-implementatie inin.
  4. Laat de Zichtbaarheid ingesteld op Privé-, selecteer maken.
  5. Selecteer aan de linkerkant Pijplijnenen selecteer vervolgens Pijplijn maken.
  6. Op de pagina Verbinding maken, voor Waar is uw code?selecteer GitHub.
  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 geforkte opslagplaats voor Selecteer een opslagplaats.
  9. Op de pagina Configureren selecteer de optie Implementeren in Azure Kubernetes Service.
  10. Selecteer in het deelvenster Implementeren naar Azure Kubernetes Service uw Azure-abonnement en selecteer vervolgens Doorgaan.
  11. Meld u aan bij uw Azure-abonnement als u hierom wordt gevraagd.
  12. Selecteer voor het Clusterhet AKS-cluster dat u in de vorige eenheid hebt gemaakt aks-eshop.
  13. Voor de naamruimte , laat bestaande geselecteerd en selecteer vervolgens standaard-.
  14. Selecteer voor het containerregisterhet Azure Container Registry dat u in de vorige les hebt gemaakt; bijvoorbeeld acseshop186748394.
  15. Voer voor de imagenaamde productservicein.
  16. Voer voor Service Port8080in.
  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 trigger-secties en resources-secties definiëren wanneer de pijplijn moet draaien. In dit geval wordt de pijplijn uitgevoerd wanneer een wijziging wordt doorgevoerd in de hoofdbranch van uw opslagplaats.

De sectie variabelen definieert de variabelen 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 ubuntu-nieuwste-agent. De taak maakt gebruik van de Docker-taak om de afbeelding te bouwen en naar de Azure Container Registry te pushen.

De laatste fase is het Implementeren de bijgewerkte productservice naar AKS. De taak maakt gebruik van de KubernetesManifest- om de image te deployen naar AKS (Azure Kubernetes Service).

De pijplijn uitvoeren

Selecteer in de rechterbovenhoek van de pagina Uw YAML-pijplijn controlerenOpslaan en uitvoeren. In het deelvenster Opslaan en uitvoeren:

  1. Selecteer Maak een nieuwe vertakking voor deze doorvoering.
  2. Laat alle andere opties ingesteld op de standaardinstellingen.
  3. Selecteer Opslaan enuitvoeren.

De pijplijn bewaken en problemen oplossen

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

een schermopname met de status van een Azure-pijplijn.

Op de overzichtspagina ziet u alle stappen van de lopende 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 fase Build.

Een schermopname van de buildfase in een pijplijn die is mislukt.

In de buildfase ziet u dat de build is mislukt. Selecteer de Een installatiekopieën bouwen en pushen naar Azure Container Registry stap. 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 in de rechterbovenhoek het menu Meer acties en selecteer vervolgens Pijplijn bewerken.

  2. Regel 17 van het YAML-bestand definieert het Dockerfile dat moet worden gebruikt, en standaard veronderstelt de pijplijn dat er een bestand met de naam Dockerfile in de hoofdmap van de opslagplaats is.

    De eShop maakt gebruik van een ander Docker-bestand voor de productservice met de naam DockerfileProducts. Bewerk regel 17 als:

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

  4. Selecteer in het deelvenster Opslaan de optie Opslaan.

  5. Selecteer uitvoeren en selecteer vervolgens in het deelvenster Pijplijn uitvoerenUitvoeren.

    Bekijk de voltooiing van fase Build. De deploy-fase wordt gepauzeerd totdat u deze selecteert en toestaat om door te gaan.

    Een schermopname met de voltooide pijplijn.

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

    een schermopname van de implementatiefase en de voltooide stappen.