Cvičení – vytvoření kanálu Azure DevOps pro nasazení aplikace nativní pro cloud

Dokončeno

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

Vytvoření kanálu 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. Jako název projektu zadejte nasazení eShopu.
  4. Ponechte viditelnost nastavenou na Soukromou a vyberte Vytvořit.
  5. Na levé straně vyberte Kanály a pak vyberte Vytvořit kanál.
  6. Na stránce Připojení vyberte v části Kde je váš kód? 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. V části Vybrat úložiště vyberte vaše forkované úložiště.
  9. Na stránce Konfigurace vyberte možnost Nasadit do služby Azure Kubernetes Service.
  10. V podokně Deploy to Azure Kubernetes Service (Nasadit do služby Azure Kubernetes Service ) vyberte své 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. V případě clusteru vyberte cluster AKS, který jste vytvořili v předchozí lekci aks-eshop.
  13. U oboru názvů ponechte vybranou možnost Existující a pak vyberte výchozí.
  14. V registru kontejneru vyberte službu Azure Container Registry, kterou jste vytvořili v předchozí lekci, například acseshop186748394.
  15. Jako název image zadejte productservice.
  16. Jako port služby zadejte 8080.
  17. Vyberte Ověřit a nakonfigurovat.

Kontrola souboru YAML kanálu

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)

Oddíly triggeru a prostředků definují, kdy se má kanál spustit. V takovém případě se kanál spustí, když se změna potvrdí do hlavní větve úložiště.

Oddíl proměnných definuje proměnné použité v kanálu. 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á agenta ubuntu-latest . Úloha používá úlohu Dockeru k sestavení a nasdílení image do služby Azure Container Registry.

Poslední fází je nasazení aktualizované produktové služby do AKS. Úloha používá úlohu KubernetesManifest k nasazení image do AKS.

Spuštění kanálu

V pravém horním rohu stránky Zkontrolovat kanál YAML vyberte Uložit a spustit. V podokně Uložit a spustit:

  1. Vyberte Vytvořit novou větev pro toto potvrzení.
  2. Ponechte všechny ostatní možnosti nastavené na výchozí hodnoty.
  3. Zvolte Uložit a Spustit.

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 spuštění kanálu, který jste vytvořili.

A screenshot showing the status of an Azure Pipeline.

Na stránce souhrnu se zobrazí všechny fáze spuštěné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í.

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

Ve fázi sestavení vidíte, že sestavení selhalo. Vyberte krok Sestavení a nasdílení image do služby 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 kanálu. Upravíte vytvořený kanál a opravíte chybu.

  1. V pravém horním rohu vyberte nabídku Další akce a pak vyberte Upravit kanál.

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

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

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

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

  5. Vyberte Spustit a pak v podokně Spustit kanál vyberte Spustit.

    Sledujte dokončení fáze sestavení. Fáze nasazení se pozastaví, dokud ji nevyberete a povolíte jeho spuštění.

    A screenshot showing the completed pipeline.

    Kanál se úspěšně dokončí. Výběrem fáze Nasazení zobrazíte kroky.

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