CI/CD-basislijnarchitectuur met Azure Pipelines
In dit artikel wordt een DevOps-werkstroom op hoog niveau beschreven voor het implementeren van toepassingswijzigingen in faserings- en productieomgevingen in Azure. De oplossing maakt gebruik van procedures voor continue integratie/continue implementatie (CI/CD) met Azure Pipelines.
Belangrijk
In dit artikel wordt een algemene CI/CD-architectuur behandeld met behulp van Azure Pipelines. Het is niet bedoeld om de specifieke kenmerken van de implementatie in verschillende omgevingen te behandelen, zoals Azure-app Services, Virtual Machines en Azure Power Platform. Details van het implementatieplatform worden behandeld in afzonderlijke artikelen.
Architectuur
Een Visio-bestand van deze architectuur downloaden.
Notitie
Hoewel dit artikel betrekking heeft op CI/CD voor wijzigingen in toepassingen, kunnen Azure Pipelines ook worden gebruikt om CI/CD-pijplijnen te bouwen voor wijzigingen in infrastructuur als code (IaC).
Gegevensstroom
De gegevens stromen als volgt door het scenario:
PR-pijplijn : een pull-aanvraag (PR) naar Azure Repos Git activeert een PULL-pijplijn. Deze pijplijn voert snelle kwaliteitscontroles uit. Deze controles moeten het volgende omvatten:
- Het bouwen van de code, waarvoor afhankelijkheden uit een afhankelijkheidsbeheersysteem moeten worden opgehaald.
- Het gebruik van hulpprogramma's voor het analyseren van de code, zoals statische codeanalyse, linting en beveiligingsscans
- Unittests
Als een van de controles mislukt, eindigt de pijplijnuitvoering en moet de ontwikkelaar de vereiste wijzigingen aanbrengen. Als alle controles zijn geslaagd, moet de pijplijn een pull-aanvraagbeoordeling vereisen. Als de pull-aanvraagbeoordeling mislukt, eindigt de pijplijn en moet de ontwikkelaar de vereiste wijzigingen aanbrengen. Als alle controles en pr-beoordelingen zijn geslaagd, wordt de pull-aanvraag samengevoegd.
CI-pijplijn : een samenvoeging met Azure Repos Git activeert een CI-pijplijn. Deze pijplijn voert dezelfde controles uit als de PULL-pijplijn met enkele belangrijke toevoegingen. De CI-pijplijn voert integratietests uit. Voor deze integratietests is de implementatie van de oplossing niet vereist, omdat de buildartefacten nog niet zijn gemaakt. Als voor de integratietests geheimen zijn vereist, haalt de pijplijn deze geheimen op uit Azure Key Vault. Als een van de controles mislukt, eindigt de pijplijn en moet de ontwikkelaar de vereiste wijzigingen aanbrengen. Het resultaat van een geslaagde uitvoering van deze pijplijn is het maken en publiceren van buildartefacten
CD-pijplijntrigger : het publiceren van artefacten activeert de CD-pijplijn.
CD-release voor fasering : de CD-pijplijn downloadt de buildartefacten die zijn gemaakt in de CI-pijplijn en implementeert de oplossing in een faseringsomgeving. De pijplijn voert vervolgens acceptatietests uit voor de faseringsomgeving om de implementatie te valideren. Als een acceptatietest mislukt, eindigt de pijplijn en moet de ontwikkelaar de vereiste wijzigingen aanbrengen. Als de tests slagen, kan een handmatige validatietaak worden geïmplementeerd om een persoon of groep te vereisen om de implementatie te valideren en de pijplijn te hervatten.
CD-release naar productie : als de handmatige interventie wordt hervat of er geen handmatige interventie is geïmplementeerd, wordt de oplossing door de pijplijn naar productie vrijgegeven. De pijplijn moet betrouwbaarheidstests uitvoeren in productie om ervoor te zorgen dat de release werkt zoals verwacht. Als een handmatige interventiestap resulteert in een annulering, mislukt de release of de betrouwbaarheidstests mislukken, wordt de release teruggedraaid, wordt de pijplijn beëindigd en moet de ontwikkelaar de vereiste wijzigingen aanbrengen.
Bewaking: Azure Monitor verzamelt waarneembaarheidsgegevens, zoals logboeken en metrische gegevens, zodat een operator de status, prestaties en gebruiksgegevens kan analyseren. Application Insights verzamelt alle toepassingsspecifieke bewakingsgegevens, zoals traceringen. Azure Log Analytics wordt gebruikt om al die gegevens op te slaan.
Onderdelen
Een Git-opslagplaats voor Azure-opslagplaatsen fungeert als een codeopslagplaats die versiebeheer en een platform biedt voor gezamenlijke projecten.
Azure Pipelines biedt een manier om toepassings - en infrastructuurcode te bouwen, testen, verpakken en vrijgeven. In dit voorbeeld zijn drie afzonderlijke pijplijnen met de volgende verantwoordelijkheden:
- PR-pijplijnen valideren code voordat een pull-aanvraag kan worden samengevoegd via linting, bouwen en eenheidstests.
- CI-pijplijnen worden uitgevoerd nadat de code is samengevoegd. Ze voeren dezelfde validatie uit als PR-pijplijnen, maar voegen integratietests toe en publiceren buildartefacten als alles slaagt.
- CD-pijplijnen implementeren buildartefacten, voer acceptatietests uit en release naar productie.
Met Azure Artifact Feeds kunt u softwarepakketten beheren en delen, zoals Maven, npm en NuGet. Met artefactfeeds kunt u de levenscyclus van uw pakketten beheren, waaronder versiebeheer, promotie en buiten gebruik stellen van pakketten. Dit helpt u ervoor te zorgen dat uw team de nieuwste en veiligste versies van uw pakketten gebruikt.
Key Vault biedt een manier om beveiligde gegevens voor uw oplossing te beheren, waaronder geheimen, versleutelingssleutels en certificaten. In deze architectuur wordt het gebruikt om toepassingsgeheimen op te slaan. Deze geheimen worden geopend via de pijplijn. Geheimen kunnen worden geopend door Azure Pipelines met een Key Vault-taak of door geheimen vanuit Key Vault te koppelen.
Monitor is een waarneembaarheidsresource waarmee metrische gegevens en logboeken, toepassingstelemetrie en metrische platformgegevens voor de Azure-services worden verzameld en opgeslagen. Gebruik deze gegevens om de toepassing te bewaken, waarschuwingen, dashboards in te stellen en hoofdoorzaakanalyse van fouten uit te voeren.
Application Insights is een bewakingsservice die realtime inzicht biedt in de prestaties en het gebruik van uw webtoepassingen.
Log Analytics-werkruimte biedt een centrale locatie waar u gegevens uit meerdere bronnen kunt opslaan, opvragen en analyseren, waaronder Azure-resources, toepassingen en services.
Alternatieven
Hoewel dit artikel zich richt op Azure Pipelines, kunt u deze alternatieven overwegen:
Azure DevOps Server (voorheen Team Foundation Server genoemd) kan worden gebruikt als een on-premises vervanging.
Jenkins is een opensource-hulpprogramma dat wordt gebruikt voor het automatiseren van builds en implementaties.
Met GitHub Actions kunt u uw CI/CD-werkstromen rechtstreeks vanuit GitHub automatiseren.
GitHub-opslagplaatsen kunnen worden vervangen door de codeopslagplaats. Azure Pipelines kan naadloos worden geïntegreerd met GitHub-opslagplaatsen.
Dit artikel is gericht op algemene CI/CD-procedures met Azure Pipelines. Hier volgen enkele rekenomgevingen waarvoor u kunt overwegen om te implementeren:
App Services is een HTTP-service voor het hosten van webtoepassingen, REST API's en mobiele back-ends. U kunt zich in uw favoriete taal ontwikkelen en toepassingen eenvoudig uitvoeren en schalen in zowel Windows- als Linux-omgevingen. Web Apps ondersteunt implementatiesites zoals fasering en productie. U kunt een toepassing implementeren in een staging-site en deze vrijgeven aan de productiesite.
Azure Virtual Machines verwerkt workloads waarvoor een hoge mate van controle is vereist of die afhankelijk zijn van besturingssysteemonderdelen en -services die niet mogelijk zijn met Web Apps (bijvoorbeeld de Windows GAC of COM).
Azure Power Platform is een verzameling cloudservices waarmee gebruikers toepassingen kunnen bouwen, implementeren en beheren zonder dat hiervoor infrastructuur of technische expertise nodig is.
Azure Functions is een serverloos rekenplatform dat u kunt gebruiken om toepassingen te bouwen. Met Functions kunt u triggers en bindingen gebruiken om services te integreren. Functies ondersteunen ook implementatiesites zoals fasering en productie. U kunt een toepassing implementeren in een staging-site en deze vrijgeven aan de productiesite.
Azure Kubernetes Service (AKS) is een beheerd Kubernetes-cluster in Azure. Kubernetes is een opensource-containerindelingsplatform.
Met Azure Container Apps kunt u toepassingen in containers uitvoeren op een serverloos platform.
Scenariodetails
Het gebruik van bewezen CI- en CD-procedures voor het implementeren van wijzigingen in toepassingen of infrastructuur biedt verschillende voordelen, waaronder:
- Kortere releasecycli : met geautomatiseerde CI/CD-processen kunt u sneller implementeren dan handmatige procedures. Veel organisaties implementeren meerdere keren per dag.
- Betere codekwaliteit : kwaliteitspoorten in CI-pijplijnen, zoals linting en eenheidstests, resulteren in code van hogere kwaliteit.
- Verminderd risico op vrijgeven : de juiste CI/CD-procedures verlagen het risico op het vrijgeven van nieuwe functies aanzienlijk. De implementatie kan worden getest vóór de release.
- Verbeterde productiviteit : met geautomatiseerde CI/CD kunnen ontwikkelaars niet meer werken aan handmatige integraties en implementaties, zodat ze zich kunnen richten op nieuwe functies.
- Terugdraaiacties inschakelen: hoewel de juiste CI/CD-procedures het aantal bugs of regressies verlagen dat wordt uitgebracht, vinden ze nog steeds plaats. CI/CD kan geautomatiseerde terugdraaiacties naar eerdere releases inschakelen.
Potentiële gebruikscases
Overweeg Azure Pipelines- en CI/CD-processen voor:
- De ontwikkelings- en implementatielevenscycli van toepassingen versnellen.
- Kwaliteit en consistentie bouwen in een geautomatiseerd build- en releaseproces.
- De stabiliteit en uptime van toepassingen vergroten.
Overwegingen
Met deze overwegingen worden de pijlers van het Azure Well-Architected Framework geïmplementeerd. Dit is een set richtlijnen die kunnen worden gebruikt om de kwaliteit van een workload te verbeteren. Zie Microsoft Azure Well-Architected Framework voor meer informatie.
Operationele uitmuntendheid
Overweeg om Infrastructure as Code (IaC) te implementeren om uw infrastructuur te definiëren en te implementeren in uw pijplijnen.
Overweeg om een van de tokenisatietaken te gebruiken die beschikbaar zijn in de VSTS-marketplace. In de context wordt vaak verwezen naar een proces waarbij gevoelige informatie (zoals API-sleutels, wachtwoorden of andere geheimen) wordt vervangen door tokens of tijdelijke aanduidingen tijdens de implementatie of configuratie.
Gebruik releasevariabelen in uw releasedefinities om configuratiewijzigingen van uw omgevingen te stimuleren. Releasevariabelen kunnen worden beperkt tot een volledige release of een bepaalde omgeving. Wanneer u variabelen gebruikt voor geheime informatie, moet u ervoor zorgen dat u het hangslotpictogram selecteert.
Overweeg om zelf-hostende agents te gebruiken als u implementeert op resources die worden uitgevoerd in een beveiligd virtueel netwerk. U kunt ook zelf-hostende agents overwegen als u een groot aantal builds uitvoert. In gevallen van grote buildvolumes kunnen zelf-hostende agents worden gebruikt om builds op een kostenefficiënte manier te versnellen.
Overweeg om Application Insights en andere bewakingshulpprogramma's zo vroeg mogelijk in uw release-pijplijn te gebruiken. Veel organisaties beginnen alleen te bewaken in hun productieomgeving. Door uw andere omgevingen te bewaken, kunt u fouten eerder in het ontwikkelproces identificeren en problemen in uw productieomgeving voorkomen.
Overweeg het gebruik van afzonderlijke bewakingsbronnen voor productie.
Overweeg OM YAML-pijplijnen te gebruiken in plaats van de klassieke interface. YAML-pijplijnen kunnen worden behandeld als andere code. YAML-pijplijnen kunnen bijvoorbeeld worden ingecheckt bij broncodebeheer en versiebeheer.
Overweeg om YAML-sjablonen te gebruiken om hergebruik te bevorderen en pijplijnen te vereenvoudigen. Pr- en CI-pijplijnen zijn bijvoorbeeld vergelijkbaar. Er kan één geparameteriseerde sjabloon worden gebruikt voor beide pijplijnen.
Overweeg omgevingen te maken buiten fasering en productie om activiteiten te ondersteunen, zoals handmatig testen van gebruikersacceptatie, prestaties en belastingstests en terugdraaiacties.
Kostenoptimalisatie
Kostenoptimalisatie gaat over manieren om onnodige uitgaven te verminderen en operationele efficiëntie te verbeteren. Zie Overzicht van de pijler kostenoptimalisatie voor meer informatie.
Azure DevOps-kosten zijn afhankelijk van het aantal gebruikers in uw organisatie dat toegang nodig heeft, samen met andere factoren, zoals het aantal gelijktijdige build-/releases dat vereist is en het aantal testgebruikers. Zie prijzen voor Azure DevOps voor meer informatie.
Deze prijscalculator biedt een schatting voor het uitvoeren van Azure DevOps met 20 gebruikers.
Azure DevOps wordt gefactureerd per gebruiker per maand. Er kunnen meer kosten in rekening worden gebracht, afhankelijk van gelijktijdige pijplijnen die nodig zijn, naast eventuele extra testgebruikers of basislicenties voor gebruikers.
Beveiliging
Houd rekening met de beveiligingsvoordelen van het gebruik van door Microsoft gehoste agents bij het kiezen of u door Microsoft gehoste of zelf-hostende agents wilt gebruiken.
Zorg ervoor dat alle wijzigingen in omgevingen worden uitgevoerd via pijplijnen. Implementeer op rollen gebaseerd toegangsbeheer (RBAC) op basis van het principe van minimale bevoegdheden, waardoor gebruikers geen toegang hebben tot omgevingen.
Overweeg stappen in Azure Pipelines te integreren om afhankelijkheden bij te houden, licenties te beheren, beveiligingsproblemen te scannen en afhankelijkheden op de hoogte te houden.
Volgende stappen
Bekijk de volgende bronnen voor meer informatie over CI/CD en Azure DevOps:
- Wat is DevOps?
- DevOps bij Microsoft : hoe werken we met Azure DevOps
- Een CI/CD-pijplijn voor .NET maken met Azure DevOps Projects
- Wat is Azure-opslagplaatsen?
- Wat is Azure Pipelines?
- Azure DevOps
- Overzicht van App Service
- Inleiding tot Azure Functions
- Basisconcepten van Azure Key Vault
- Overzicht van Azure Monitor