Gyakorlat – Azure DevOps-folyamat létrehozása a natív felhőbeli alkalmazás üzembe helyezéséhez

Befejeződött

A felettese azt szeretné, hogy módosítsa a vállalati eShop alkalmazás CI/CD-jét az Azure Pipelines használatára. Most létrehoz egy Azure DevOps-folyamatot a termékszolgáltatás létrehozásához és üzembe helyezéséhez.

Azure DevOps-folyamat létrehozása

Fontos

A kezdés előtt rendelkeznie kell egy Azure DevOps-fiókkal. Ha nincs, ingyenesen létrehozhat egyet a dev.azure.com.

  1. Jelentkezzen be a dev.azure.com.
  2. Válassza az + Új projekt lehetőséget.
  3. A Projekt neve mezőben adja meg az eShop üzembe helyezését.
  4. Hagyja a láthatósági beállítást Privát értékre, és válassza a Létrehozás lehetőséget.
  5. A bal oldalon válassza a Folyamatok, majd a Folyamat létrehozása lehetőséget.
  6. A Csatlakozás lapon válassza a GitHubot a Hol van a kód?
  7. Ha a rendszer kéri, jelentkezzen be a GitHubra, és engedélyezze az Azure Pipelines számára a GitHub-fiók elérését.
  8. Az adattár kiválasztásához válassza ki az elágazott adattárat.
  9. A Konfigurálás lapon válassza az Üzembe helyezés az Azure Kubernetes Service-ben lehetőséget.
  10. Az Üzembe helyezés az Azure Kubernetes Service panelen válassza ki az Azure-előfizetését, majd válassza a Folytatás lehetőséget.
  11. Ha a rendszer kéri, jelentkezzen be az Azure-előfizetésbe.
  12. A fürt esetében válassza ki az előző aks-eshop egységben létrehozott AKS-fürtöt.
  13. A névtérnél hagyja bejelölve a Meglévőt, majd válassza az alapértelmezett értéket.
  14. A Tárolóregisztrációs adatbázishoz válassza ki az előző leckében létrehozott Azure Container Registryt, például acseshop186748394.
  15. A kép neveként adja meg a productservice nevet.
  16. A szolgáltatásporthoz írja be a 8080 értéket.
  17. Válassza az Ellenőrzés és konfigurálás lehetőséget.

A folyamat YAML-fájljának áttekintése

Az Azure Pipelines YAML-fájlokat használ az alkalmazás létrehozásához és üzembe helyezéséhez szükséges lépések meghatározásához. A YAML-fájl a GitHub-adattárban van tárolva, és a megadott információk alapján automatikusan létre lett hozva Önnek.

Tekintsük át a YAML-fájlt:

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)

Az eseményindító és az erőforrások szakaszai határozzák meg, hogy mikor kell futtatni a folyamatot. Ebben az esetben a folyamat akkor fog futni, ha az adattár fő ágában módosítás van lekötve.

A változók szakasz a folyamatban használt változókat határozza meg. A változók az Azure Container Registry és a használni kívánt Dockerfile meghatározására szolgálnak.

A YAML ezután meghatároz egy buildelési feladatot, amely az ubuntu legújabb ügynököt használja. A feladat a Docker-feladat használatával hozza létre és küldi le a rendszerképet az Azure Container Registrybe.

Az utolsó lépés a frissített termékszolgáltatás üzembe helyezése az AKS-ben. A feladat a KubernetesManifest-feladattal telepíti a rendszerképet az AKS-ben.

A folyamat futtatása

A folyamat YAML-lapjának jobb felső sarkában válassza a Mentés és futtatás lehetőséget. A Mentés és futtatás panelen:

  1. Válassza az Új ág létrehozása ehhez a véglegesítéshez lehetőséget.
  2. Hagyja meg az összes többi beállítást az alapértelmezett értékre.
  3. Válassza a Mentés és futtatás lehetőséget.

A folyamat figyelése és hibaelhárítása

Az Azure Pipelines monitorozása és kezelése az Azure DevOps portálon történik. Nézzük meg a létrehozott folyamat futtatásának kimenetét.

A screenshot showing the status of an Azure Pipeline.

Az összefoglaló oldal a futó folyamat összes szakaszát mutatja be. Kiválaszthat egy szakaszt a lépések részletesebb megtekintéséhez. Egy pillanat alatt látni fogja, hogy a folyamat meghiúsult. Válassza ki a Build szakaszt.

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

A buildelési szakaszban láthatja, hogy a build meghiúsult. Válassza ki a Build elemet, és küldjön le egy lemezképet az Azure Container Registry-lépésbe . A naplófájlban a következő hibaüzenet jelenik meg:

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

A hiba javítása

A DevOpsban lépjen vissza a folyamat összegzési oldalára. A hiba kijavításához szerkessze a létrehozott folyamatot.

  1. A jobb felső sarokban válassza a További műveletek menüt, majd a Folyamat szerkesztése lehetőséget.

  2. A YAML-fájl 17. sora határozza meg a használni kívánt Docker-fájlt, és a folyamat alapértelmezés szerint egy Dockerfile nevű fájlt vár az adattár gyökerében.

    Az eShop egy másik Docker-fájlt használ a DockerfileProducts nevű termékszolgáltatáshoz. A 17. sor szerkesztése a következőhöz:

      dockerfilePath: '**/DockerfileProducts'
    
  3. Válassza a Mentés parancsot.

  4. A Mentés panelen válassza a Mentés lehetőséget.

  5. Válassza a Futtatás lehetőséget, majd a Folyamat futtatása panelen válassza a Futtatás lehetőséget.

    Tekintse meg a buildelési szakasz befejezését. Az üzembe helyezési szakasz addig szünetel, amíg ki nem választja, és engedélyezi annak futtatását.

    A screenshot showing the completed pipeline.

    A folyamat sikeresen befejeződött. A lépések megtekintéséhez válassza az Üzembe helyezés szakaszt.

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