Övning – Skapa en Azure DevOps-pipeline för att distribuera din molnbaserade app
Din chef vill att du ändrar CI/CD för företagets eShop-app så att den använder Azure Pipelines. Nu ska du skapa en Azure DevOps-pipeline för att skapa och distribuera din produkttjänst.
Skapa en Azure DevOps-pipeline
Viktigt!
Innan du börjar måste du ha ett Azure DevOps-konto. Om du inte har en kan du skapa en kostnadsfritt på dev.azure.com.
- Logga in på dev.azure.com.
- Välj + Nytt projekt.
- Som Projektnamn anger du eShop-distribution.
- Låt synligheten vara privat och välj Skapa.
- Till vänster väljer du Pipelines och sedan Skapa pipeline.
- På sidan Anslut, för Var är din kod?, väljer du GitHub.
- Logga in på GitHub om du uppmanas att göra det och ge Azure Pipelines åtkomst till ditt GitHub-konto.
- För Välj en lagringsplats väljer du din förgrenade lagringsplats.
- På sidan Konfigurera väljer du alternativet Distribuera till Azure Kubernetes Service .
- I fönstret Distribuera till Azure Kubernetes Service väljer du din Azure-prenumeration och väljer sedan Fortsätt.
- Logga in på din Azure-prenumeration om du uppmanas att göra det.
- För klustret väljer du det AKS-kluster som du skapade i föregående enhet aks-eshop.
- För namnområdet lämnar du Befintlig markerad och väljer sedan standard.
- För containerregistret väljer du det Azure Container Registry som du skapade i föregående enhet, till exempel acseshop186748394.
- För avbildningsnamnet anger du productservice.
- För tjänstporten anger du 8080.
- Välj Verifiera och konfigurera.
Granska YAML-pipelinefilen
Azure Pipelines använder YAML-filer för att definiera stegen för att skapa och distribuera din app. YAML-filen lagras på din GitHub-lagringsplats och skapades automatiskt åt dig, baserat på den information du angav.
Nu ska vi granska YAML-filen:
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)
Avsnitten utlösare och resurser definierar när pipelinen ska köras. I det här fallet körs pipelinen när en ändring checkas in på huvudgrenen för lagringsplatsen.
Avsnittet variabler definierar de variabler som används i pipelinen. Variablerna används för att definiera Azure Container Registry och Den Dockerfile som ska användas.
YAML definierar sedan ett build-jobb som använder den senaste ubuntu-agenten. Jobbet använder Docker-uppgiften för att skapa och skicka avbildningen till Azure Container Registry.
Det sista steget är att distribuera den uppdaterade produkttjänsten till AKS. Jobbet använder KubernetesManifest-uppgiften för att distribuera avbildningen till AKS.
Köra pipelinen
Längst upp till höger på yaml-sidan Granska din pipeline väljer du Spara och kör. I fönstret Spara och kör:
- Välj Skapa en ny gren för den här incheckningen.
- Låt alla andra alternativ vara inställda på standardinställningarna.
- Välj Spara och kör.
Övervaka och felsöka pipelinen
Azure Pipelines övervakas och hanteras från Azure DevOps-portalen. Nu ska vi titta på utdata från körningen av pipelinen som du skapade.
Sammanfattningssidan visar alla faser i pipelinen som körs. Du kan välja en fas för att visa stegen mer detaljerat. Om en stund ser du att pipelinen har misslyckats. Välj fasen Skapa.
I byggfasen kan du se att bygget har misslyckats. Välj steget Skapa och skicka en avbildning till Azure Container Registry . Felet i loggfilen visar:
##[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/**/Dockerfile was found.
Åtgärda felet
Gå tillbaka till sammanfattningssidan för pipelinen i DevOps. Du kommer att redigera den skapade pipelinen för att åtgärda felet.
Längst upp till höger väljer du menyn Fler åtgärder och väljer sedan Redigera pipeline.
Rad 17 i YAML-filen definierar den Dockerfile som ska användas, och som standard förväntar sig pipelinen att det finns en fil med namnet Dockerfile i lagringsplatsens rot.
eShop använder en annan docker-fil för produkttjänsten med namnet DockerfileProducts. Redigera rad 17 så att den blir:
dockerfilePath: '**/DockerfileProducts'
Välj Spara.
I fönstret Spara väljer du Spara.
Välj Kör och välj sedan Kör i fönstret Kör pipeline.
Se byggsteget vara klart. Fasen Distribuera pausar tills du väljer den och tillåter att den körs.
Pipelinen har slutförts. Välj steget Distribuera för att visa stegen.