Den här artikeln beskriver ett DevOps-arbetsflöde på hög nivå för distribution av programändringar till mellanlagrings- och produktionsmiljöer i Azure. Lösningen använder metoder för kontinuerlig integrering/kontinuerlig distribution (CI/CD) med Azure Pipelines.
Viktigt
Den här artikeln beskriver en allmän CI/CD-arkitektur med Hjälp av Azure Pipelines. Den är inte avsedd att omfatta detaljerna för distribution till olika miljöer, till exempel Azure App Services, Virtual Machines och Azure Power Platform. Information om distributionsplattformen beskrivs i separata artiklar.
Arkitektur
Ladda ned en Visio-fil med den här arkitekturen.
Anteckning
Även om den här artikeln beskriver CI/CD för programändringar kan Azure Pipelines också användas för att skapa CI/CD-pipelines för ändringar i infrastruktur som kod (IaC).
Dataflöde
Data flödar genom scenariot på följande sätt:
PR-pipeline – En pull-begäran (PR) till Azure Repos Git utlöser en PR-pipeline. Den här pipelinen kör snabba kvalitetskontroller. Dessa kontroller bör omfatta:
- Skapa koden, som kräver att beroenden hämtas från ett beroendehanteringssystem.
- Användning av verktyg för att analysera koden, till exempel statisk kodanalys, lintning och säkerhetsgenomsökning
- Enhetstester
Om någon av kontrollerna misslyckas avslutas pipelinekörningen och utvecklaren måste göra de ändringar som krävs. Om alla kontroller godkänns bör pipelinen kräva en PR-granskning. Om PR-granskningen misslyckas avslutas pipelinen och utvecklaren måste göra de ändringar som krävs. Om alla kontroller och PR-granskningar godkänns slås PR samman.
CI-pipeline – En sammanslagning till Azure Repos Git utlöser en CI-pipeline. Den här pipelinen kör samma kontroller som PR-pipelinen med några viktiga tillägg. CI-pipelinen kör integreringstester. Dessa integreringstester bör inte kräva distribution av lösningen eftersom byggartefakterna inte har skapats ännu. Om integreringstesterna kräver hemligheter hämtar pipelinen dessa hemligheter från Azure Key Vault. Om någon av kontrollerna misslyckas avslutas pipelinen och utvecklaren måste göra de ändringar som krävs. Resultatet av en lyckad körning av den här pipelinen är skapandet och publiceringen av byggartefakter
CD-pipelineutlösare – Publiceringen av artefakter utlöser CD-pipelinen.
CD-version till mellanlagring – CD-pipelinen laddar ned de byggartefakter som skapas i CI-pipelinen och distribuerar lösningen till en mellanlagringsmiljö. Pipelinen kör sedan godkännandetester mot mellanlagringsmiljön för att verifiera distributionen. Om ett godkännandetest misslyckas avslutas pipelinen och utvecklaren måste göra de ändringar som krävs. Om testerna lyckas kan en manuell valideringsuppgift implementeras för att kräva att en person eller grupp verifierar distributionen och återupptar pipelinen.
CD-version till produktion – Om den manuella åtgärden återupptas, eller om det inte finns någon manuell åtgärd implementerad, släpper pipelinen lösningen till produktion. Pipelinen bör köra röktester i produktion för att säkerställa att versionen fungerar som förväntat. Om ett manuellt åtgärdssteg resulterar i ett avbrott, om versionen misslyckas eller om röktesterna misslyckas återställs versionen, pipelinen avslutas och utvecklaren måste göra de ändringar som krävs.
Övervakning – Azure Monitor samlar in observerbarhetsdata som loggar och mått så att en operatör kan analysera hälso-, prestanda- och användningsdata. Application Insights samlar in alla programspecifika övervakningsdata, till exempel spårningar. Azure Log Analytics används för att lagra alla dessa data.
Komponenter
En Azure Repos Git-lagringsplats fungerar som en kodlagringsplats som tillhandahåller versionskontroll och en plattform för samarbetsprojekt.
Azure Pipelines är ett sätt att skapa, testa, paketera och släppa program- och infrastrukturkod. Det här exemplet har tre distinkta pipelines med följande ansvarsområden:
- PR-pipelines validerar kod innan en PR kan slås samman genom lintning, skapande och enhetstestning.
- CI-pipelines körs när koden har sammanfogats. De utför samma validering som PR-pipelines, men lägger till integreringstestning och publicerar byggartefakter om allt lyckas.
- CD-pipelines distribuerar byggartefakter, kör godkännandetester och släpper till produktion.
Med Azure Artifact Feeds kan du hantera och dela programvarupaket som Maven, npm och NuGet. Med artefaktfeeds kan du hantera livscykeln för dina paket, inklusive versionshantering, befordran och tillbakatagande av paket. På så sätt kan du se till att ditt team använder de senaste och säkraste versionerna av dina paket.
Key Vault är ett sätt att hantera säkra data för din lösning, inklusive hemligheter, krypteringsnycklar och certifikat. I den här arkitekturen används den för att lagra programhemligheter. Dessa hemligheter nås via pipelinen. Hemligheter kan nås av Azure Pipelines med en Key Vault uppgift eller genom att länka hemligheter från Key Vault.
Monitor är en observerbarhetsresurs som samlar in och lagrar mått och loggar, programtelemetri och plattformsmått för Azure-tjänsterna. Använd dessa data för att övervaka programmet, konfigurera aviseringar, instrumentpaneler och utföra rotorsaksanalys av fel.
Application Insights är en övervakningstjänst som ger insikter i realtid om prestanda och användning av dina webbprogram.
Log Analytics-arbetsytan är en central plats där du kan lagra, fråga och analysera data från flera källor, inklusive Azure-resurser, program och tjänster.
Alternativ
Den här artikeln fokuserar på Azure Pipelines, men du kan överväga följande alternativ:
Azure DevOps Server (som tidigare kallades Team Foundation Server) kan användas som en lokal ersättning.
Jenkins är ett öppen källkod verktyg som används för att automatisera byggen och distributioner.
GitHub Actions kan du automatisera dina CI/CD-arbetsflöden direkt från GitHub.
GitHub-lagringsplatser kan ersättas som kodlagringsplats. Azure Pipelines integreras sömlöst med GitHub-lagringsplatser.
Den här artikeln fokuserar på allmänna CI/CD-metoder med Azure Pipelines. Följande är några beräkningsmiljöer som du kan överväga att distribuera till:
App Services är en HTTP-baserad tjänst som är värd för webbprogram, REST-API:er och mobila serverdelar. Du kan utveckla på ditt favoritspråk och program körs och skalas enkelt i både Windows- och Linux-baserade miljöer. Web Apps stöder distributionsfack som mellanlagring och produktion. Du kan distribuera ett program till en mellanlagringsplats och släppa det till produktionsplatsen.
Azure Virtual Machines hanterar arbetsbelastningar som kräver hög kontroll eller är beroende av operativsystemkomponenter och tjänster som inte är möjliga med Web Apps (till exempel Windows GAC eller COM).
Azure Power Platform är en samling molntjänster som gör det möjligt för användare att skapa, distribuera och hantera program utan behov av infrastruktur eller teknisk expertis.
Azure Functions är en serverlös beräkningsplattform som du kan använda för att skapa program. Med Functions kan du använda utlösare och bindningar för att integrera tjänster. Funktioner stöder även distributionsfack som mellanlagring och produktion. Du kan distribuera ett program till en mellanlagringsplats och släppa det till produktionsplatsen.
Azure Kubernetes Service (AKS) är ett hanterat Kubernetes-kluster i Azure. Kubernetes är en öppen källkod containerorkestreringsplattform.
Med Azure Container Apps kan du köra containerbaserade program på en serverlös plattform.
Scenarioinformation
Användning av beprövade CI- och CD-metoder för att distribuera program- eller infrastrukturändringar ger olika fördelar, inklusive:
- Kortare lanseringscykler – Med automatiserade CI/CD-processer kan du distribuera snabbare än manuella metoder. Många organisationer distribuerar flera gånger per dag.
- Bättre kodkvalitet – Kvalitetsgrindar i CI-pipelines, till exempel linting och enhetstestning, resulterar i kod av högre kvalitet.
- Minskad risk för lansering – Korrekt CI/CD-metoder minskar avsevärt risken för att nya funktioner släpps. Distributionen kan testas innan den släpps.
- Ökad produktivitet – Automatiserad CI/CD befriar utvecklare från att arbeta med manuella integreringar och distributioner så att de kan fokusera på nya funktioner.
- Aktivera återställningar – Även om rätt CI/CD-metoder sänker antalet buggar eller regressioner som släpps, inträffar de fortfarande. CI/CD kan aktivera automatiserade återställningar till tidigare versioner.
Potentiella användningsfall
Överväg Azure Pipelines och CI/CD-processer för:
- Snabbare programutveckling och utvecklingslivscykler.
- Skapa kvalitet och konsekvens i en automatiserad bygg- och lanseringsprocess.
- Öka programmets stabilitet och drifttid.
Överväganden
Dessa överväganden implementerar grundpelarna i Azure Well-Architected Framework, som är en uppsättning vägledande grundsatser som kan användas för att förbättra kvaliteten på en arbetsbelastning. Mer information finns i Microsoft Azure Well-Architected Framework.
Utmärkt driftseffektivitet
Överväg att implementera infrastruktur som kod (IaC) för att definiera din infrastruktur och distribuera den i dina pipelines.
Överväg att använda en av de tokeniseringsuppgifter som är tillgängliga på VSTS Marketplace.
Använd versionsvariabler i dina versionsdefinitioner för att skapa konfigurationsändringar i dina miljöer. Versionsvariabler kan begränsas till en hel version eller en viss miljö. När du använder variabler för hemlig information ska du se till att du väljer hänglåsikonen.
Överväg att använda lokalt installerade agenter om du distribuerar till resurser som körs i ett skyddat virtuellt nätverk. Du kan också överväga lokalt installerade agenter om du kör en stor mängd versioner. Vid höga byggvolymer kan lokalt installerade agenter användas för att påskynda byggen på ett kostnadseffektivt sätt.
Överväg att använda Application Insights och andra övervakningsverktyg så tidigt som möjligt i din versionspipeline. Många organisationer börjar bara övervaka i sin produktionsmiljö. Genom att övervaka dina andra miljöer kan du identifiera buggar tidigare i utvecklingsprocessen och undvika problem i produktionsmiljön.
Överväg att använda separata övervakningsresurser för produktion.
Överväg att använda YAML-pipelines i stället för det klassiska gränssnittet. YAML-pipelines kan behandlas som annan kod. YAML-pipelines kan till exempel checkas in till källkontroll och versionshanteras.
Överväg att använda YAML-mallar för att främja återanvändning och förenkla pipelines. Pr- och CI-pipelines är till exempel liknande. En enda parametriserad mall kan användas för båda pipelines.
Överväg att skapa miljöer utöver mellanlagring och produktion för att stödja aktiviteter som manuell acceptanstestning av användare, prestanda- och belastningstestning och återställningar.
Kostnadsoptimering
Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra driftseffektiviteten. Mer information finns i Översikt över grundpelare för kostnadsoptimering.
Kostnaderna för Azure DevOps beror på antalet användare i din organisation som behöver åtkomst, tillsammans med andra faktorer som antalet samtidiga versioner/versioner som krävs och antalet testanvändare. Mer information finns i Prissättning för Azure DevOps.
Den här priskalkylatorn ger en uppskattning för att köra Azure DevOps med 20 användare.
Azure DevOps faktureras per användare och månad. Det kan finnas fler avgifter beroende på samtidiga pipelines som behövs, förutom eventuella ytterligare testanvändare eller grundläggande användarlicenser.
Säkerhet
Överväg säkerhetsfördelarna med att använda Microsofts värdbaserade agenter när du väljer om du vill använda Agenter med Microsoft-värd eller lokalt värd.
Se till att alla ändringar i miljöer görs via pipelines. Implementera rollbaserade åtkomstkontroller (RBAC) enligt principen om lägsta behörighet, vilket hindrar användare från att komma åt miljöer.
Överväg att integrera steg i Azure Pipelines för att spåra beroenden, hantera licensiering, söka efter sårbarheter och hålla beroenden uppdaterade.
Nästa steg
Läs följande resurser om du vill veta mer om CI/CD och Azure DevOps:
- Vad är DevOps?
- DevOps på Microsoft – Så här arbetar vi med Azure DevOps
- Stegvisa självstudier: DevOps med Azure DevOps
- Skapa en CI/CD-pipeline för .NET med Azure DevOps Projects
- Vad är Azure-lagringsplatser?
- Vad är Azure Pipelines?
- Azure DevOps
- Översikt över App Service
- Introduktion till Azure Functions
- Grundläggande begrepp i Azure Key Vault
- Översikt över Azure Monitor