Cvičení – vytvoření kanálu Azure DevOps pro nasazení aplikace nativní pro cloud
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.
- Přihlaste se k dev.azure.com.
- Vyberte + Nový projekt.
- Jako název projektu zadejte nasazení eShopu.
- Ponechte viditelnost nastavenou na Soukromou a vyberte Vytvořit.
- Na levé straně vyberte Kanály a pak vyberte Vytvořit kanál.
- Na stránce Připojení vyberte v části Kde je váš kód? GitHub.
- Pokud se zobrazí výzva, přihlaste se k GitHubu a povolte Azure Pipelines pro přístup k vašemu účtu GitHub.
- V části Vybrat úložiště vyberte vaše forkované úložiště.
- Na stránce Konfigurace vyberte možnost Nasadit do služby Azure Kubernetes Service.
- V podokně Deploy to Azure Kubernetes Service (Nasadit do služby Azure Kubernetes Service ) vyberte své předplatné Azure a pak vyberte Pokračovat.
- Pokud se zobrazí výzva, přihlaste se ke svému předplatnému Azure.
- V případě clusteru vyberte cluster AKS, který jste vytvořili v předchozí lekci aks-eshop.
- U oboru názvů ponechte vybranou možnost Existující a pak vyberte výchozí.
- V registru kontejneru vyberte službu Azure Container Registry, kterou jste vytvořili v předchozí lekci, například acseshop186748394.
- Jako název image zadejte productservice.
- Jako port služby zadejte 8080.
- 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:
- Vyberte Vytvořit novou větev pro toto potvrzení.
- Ponechte všechny ostatní možnosti nastavené na výchozí hodnoty.
- 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.
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í.
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.
V pravém horním rohu vyberte nabídku Další akce a pak vyberte Upravit kanál.
Řá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'
Zvolte Uložit.
V podokně Uložit vyberte Uložit.
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í.
Kanál se úspěšně dokončí. Výběrem fáze Nasazení zobrazíte kroky.