Cvičení – Vytvořte pipeline Azure DevOps pro nasazení cloudově nativní aplikace

Dokončeno

Váš nadřízený chce změnit CI/CD pro aplikace eShop společnosti tak, aby používal Azure Pipelines. Teď vytvoříte Azure DevOps Pipeline, který sestaví a nasadí službu vašich produktů.

Vytvoření potrubí Azure DevOps

Důležitý

Než začnete, budete muset mít účet Azure DevOps. Pokud ho nemáte, můžete si ho zdarma vytvořit v dev.azure.com.

  1. Přihlaste se k dev.azure.com.
  2. Vyberte + Nový projekt.
  3. Pro název projektu zadejte nasazení eShopu .
  4. Ponechte viditelnost nastavenou na soukromou, zvolte Vytvořit.
  5. Na levé straně vyberte Pipelines, pak vyberte Create Pipeline.
  6. Na stránce Connect, pro Kde je váš kód?vyberte GitHub .
  7. Pokud se zobrazí výzva, přihlaste se k GitHubu a povolte Azure Pipelines pro přístup k vašemu účtu GitHub.
  8. Pro Vyberte úložištěvyberte vaše odvozené úložiště.
  9. Na stránce Konfigurovat vyberte možnost Nasadit do služby Azure Kubernetes Service.
  10. V podokně Nasazení do služby Azure Kubernetes Service vyberte předplatné Azure a pak vyberte Pokračovat.
  11. Pokud se zobrazí výzva, přihlaste se ke svému předplatnému Azure.
  12. Pro clustervyberte AKS cluster, který jste vytvořili v předchozí jednotce aks-eshop.
  13. U oboru názvůponechte vybranou možnost Existující a pak vyberte výchozí.
  14. Ve registru kontejneruvyberte službu Azure Container Registry, kterou jste vytvořili v předchozí lekci; například acseshop186748394.
  15. Jako název image ,, zadejte productservice .
  16. Do portu službyzadejte 8080.
  17. Vyberte Ověřit a nakonfigurovat.

Zkontrolovat soubor YAML pipeline

Azure Pipelines používá soubory YAML k definování kroků pro sestavení a nasazení aplikace. Soubor YAML je uložený v úložišti GitHub a automaticky se pro vás vytvořil na základě informací, které jste zadali.

Pojďme se podívat na soubor YAML:

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)

Sekce triggeru a prostředků definují, kdy se má pipelina spustit. V takovém případě se pipeline spustí, když se změna potvrdí do hlavní větve vašeho úložiště.

Oddíl proměnných definuje proměnné použité v zpracovatelském řetězci. Proměnné se používají k definování služby Azure Container Registry a souboru Dockerfile, který se má použít.

YAML pak definuje úlohu sestavení, která používá ubuntu-latest agent. Úloha používá úlohu Dockeru k sestavení a nasdílení image do služby Azure Container Registry.

Poslední fází je nasadit aktualizovanou produktovou službu do AKS. Úloha k nasazení image do AKS používá úlohu KubernetesManifest.

Spustit datový tok

V pravém horním rohu Zkontrolujte stránku YAML kanálu, vyberte Uložit a spusťte. V podokně Uložit a spustit:

  1. Vyberte Vytvořit novou větev pro tento commit.
  2. Ponechte všechny ostatní možnosti nastavené na výchozí hodnoty.
  3. Vyberte Uložit a spusťte.

Monitorování a řešení potíží s kanálem

Azure Pipelines se monitorují a spravují na portálu Azure DevOps. Podívejme se na výstup běhu pipeline, který jste vytvořili.

snímek obrazovky znázorňující stav kanálu Azure.

Na souhrnové stránce se zobrazí všechny fáze vašeho běžícího datového kanálu. Pokud chcete zobrazit kroky podrobněji, můžete vybrat dílčí fázi. Za chvíli uvidíte, že kanál selhal. Vyberte fázi sestavení .

snímek obrazovky fáze sestavení v pipeline, která selhala.

Ve fázi sestavení vidíte, že sestavení selhalo. Vyberte krok Vytvoření a odeslání image do Azure Container Registry. Chyba v souboru protokolu ukazuje:

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

Oprava chyby

V DevOps se vraťte na stránku souhrnu pipeline. Upravíte vytvořený kanál a opravíte chybu.

  1. V pravém horním rohu vyberte nabídku Další akce a poté zvolte možnost Upravit kanál.

  2. Řádek 17 souboru YAML definuje dockerfile, který se má použít, a ve výchozím nastavení kanál očekává, že bude soubor s názvem Dockerfile v kořenovém adresáři úložiště.

    EShop používá jiný soubor Dockeru pro produktovou službu s názvem DockerfileProducts. Upravit řádek 17 tak, aby:

      dockerfilePath: '**/DockerfileProducts.acr'
    
  3. Vyberte Uložit.

  4. V podokně Uložit vyberte Uložit.

  5. Vyberte Spustit a pak v podokně kanálu spuštění vyberte Spustit.

    Podívejte se na dokončení fáze sestavení . Fáze Deploy se pozastaví, dokud ji nevyberete a nedovolíte její spuštění.

    snímek obrazovky znázorňující dokončený kanál

    Potrubí je úspěšně dokončeno. Výběrem fáze Nasadit zobrazíte kroky.

    snímek obrazovky znázorňující fázi nasazení a úspěšně dokončené kroky