CI/CD-baslinjearkitektur med Azure Pipelines

I den här artikeln beskrivs 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. Det är inte avsett att täcka 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

Arkitekturdiagram över en CI/CD-pipeline med Hjälp av Azure Pipelines.

Ladda ned en Visio-fil med den här arkitekturen.

Kommentar

Ä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:

  1. 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, vilket kräver att beroenden hämtas från ett beroendehanteringssystem.
    • Användning av verktyg för att analysera koden, till exempel statisk kodanalys, linting och säkerhetsgenomsökning
    • Enhetstest

    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 nödvändiga ändringarna. Om alla kontroller och PR-granskningar godkänns sammanfogas pr.en.

  2. 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 nödvändiga ändringarna. Resultatet av en lyckad körning av den här pipelinen är skapandet och publiceringen av byggartefakter

  3. CD-pipelineutlösare – Publiceringen av artefakter utlöser CD-pipelinen.

  4. 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 nödvändiga ändringarna. Om testerna lyckas kan en manuell valideringsuppgift implementeras för att kräva att en person eller grupp verifierar distributionen och återupptar pipelinen.

  5. CD-version till produktion – Om den manuella åtgärden återupptas, eller om ingen manuell åtgärd implementeras, 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 misslyckas versionen eller röktesterna misslyckas, versionen återställs, pipelinen avslutas och utvecklaren måste göra de ändringar som krävs.

  6. Ö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 Git-lagringsplats för Azure Repos 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 sammanfogas 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, till exempel Maven, npm och NuGet. Med artefaktflöden kan du hantera livscykeln för dina paket, inklusive versionshantering, marknadsföring och tillbakatagande av paket. Detta hjälper dig att 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

Även om den här artikeln fokuserar på Azure Pipelines kan du överväga följande alternativ:

  • Azure DevOps Server (tidigare kallat 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.

  • Med 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 distributionsplatser som mellanlagring och produktion. Du kan distribuera ett program till ett mellanlagringsfack och släppa det till produktionsplatsen.

  • Azure Virtual Machines hanterar arbetsbelastningar som kräver en hög grad av 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. Functions stöder även distributionsfack som mellanlagring och produktion. Du kan distribuera ett program till ett mellanlagringsfack 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.

Information om scenario

Att använda beprövade CI- och CD-metoder för att distribuera program- eller infrastrukturändringar ger olika fördelar, bland annat:

  • Kortare versionscykler – 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 lintning och enhetstestning, resulterar i kod av högre kvalitet.
  • Minskad risk för att släppa – Korrekt CI/CD-metoder minskar dramatiskt risken för att släppa nya funktioner. Distributionen kan testas före lanseringen.
  • Ökad produktivitet – Automatiserad CI/CD gör att utvecklare inte kan 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, sker 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:

  • Påskynda programutveckling och distributionslivscykler.
  • Skapa kvalitet och konsekvens i en automatiserad bygg- och lanseringsprocess.
  • Öka programmets stabilitet och drifttid.

Att tänka på

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.

Driftsäkerhet

  • Överväg att implementera Infrastruktur som kod (IaC) för att definiera infrastrukturen och distribuera den i dina pipelines.

  • Överväg att använda någon av de tokeniseringsuppgifter som är tillgängliga på VSTS Marketplace, i kontexten refererar du ofta till en process där känslig information (till exempel API-nycklar, lösenord eller andra hemligheter) ersätts med token eller platshållare under distributionen eller konfigurationen.

  • 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 kontrollerar du 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 versionspipelinen. 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 på källkontroll och versionshanteras.

  • Överväg att använda YAML-mallar för att främja återanvändning och förenkla pipelines. Till exempel liknar PR- och CI-pipelines. En enda parameteriserad 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 testning av användargodkännande, prestanda- och belastningstestning och återställningar.

Kostnadsoptimering

Kostnadsoptimering handlar om att titta på sätt att minska onödiga utgifter och förbättra drifteffektiviteten. Mer information finns i Översikt över kostnadsoptimeringspelare.

Azure DevOps-kostnader beror på antalet användare i din organisation som kräver åtkomst, tillsammans med andra faktorer som antalet samtidiga versioner/versioner som krävs och antalet testanvändare. Mer information finns i Priser för Azure DevOps.

Den här priskalkylatorn ger en uppskattning för att köra Azure DevOps med 20 användare.

Azure DevOps debiteras per användare och månad. Det kan finnas fler avgifter beroende på samtidiga pipelines som behövs, utöver eventuella ytterligare testanvändare eller grundläggande användarlicenser.

Säkerhet

  • Överväg säkerhetsfördelarna med att använda Microsoft-värdbaserade agenter när du väljer om du vill använda Microsoft-värdbaserade eller lokalt installerade agenter.

  • Se till att alla ändringar i miljöer görs via pipelines. Implementera rollbaserade åtkomstkontroller (RBAC) på 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: