Continuous Delivery Deployment
De deployment van software is in DevOps gebaseerd op Continuous Delivery. Continuous Delivery maakt het mogelijk om allerlei soorten wijzigingen, inclusief nieuwe functies, configuratiewijzigingen, bugfixes en experimenten, veilig en snel op een duurzame manier in productie te nemen. Een Branching strategie en Base Truncs spelen hierin een belangrijke rol.
“Deployment” definiëren is geen zware opgave. We het is een term die we veel gebruiken bij software als alternatief voor het woord implementatie. Dat wil zeggen het installeren, instellen, testen en werkend krijgen van software. Software leveranciers speler hier vaak een speciale tools voor. Bijvoorbeeld de Microsoft deployment toolkit.
Het doel van Continuous Delivery is om de deployment van (grootschalige, complexe) software op aanvraag op een voorspelbare, routinematige manier uit te voeren.
We bereiken dit door ervoor te zorgen dat onze programmatuur altijd inzetbaar is, zelfs als duizenden ontwikkelaars continu wijzigingen doorvoeren. Daarbij elimineren we de integratie-, test- en verhardingsfasen die traditioneel volgden op “dev complete” volledig. Ook het vastlopen van het programma sluiten we volledig uit.
Als we software vaker willen deployen gaan we er vaak van uit dat we lagere niveaus van stabiliteit en betrouwbaarheid in onze systemen moeten accepteren. Uit onderzoek blijkt echter dat dit niet het geval is. Teams met hoge prestaties leveren namelijk consequent sneller en betrouwbaarder software op dan hun traditionele concurrenten. Dit geldt zelfs in sterk gereguleerde domeinen zoals financiële dienstverlening en overheid. Continuous Delivery biedt dus een ongelooflijk concurrentievoordeel voor organisaties die bereid zijn om te investeren in dit streven.
Deze Best Practices vormen de kern van Continuous Delivery en helpen ons met het behalen van verschillende belangrijke voordelen:
Het primaire doel van Continuous Delivery is om software deployment pijnloos te maken. Dat leidt tot events met een laag risico die we op elk moment en op aanvraag kunnen uitvoeren. Door patronen zoals blauw-groene deployments toe te passen, is het betrekkelijk simpel om deployments zonder downtime uit te voeren zonder dat de gebruikers er iets van merken.
Het is niet ongebruikelijk dat de integratie- en test/fix-fase van de traditionele deployment methoden weken of zelfs maanden in beslag neemt. Teams kunnen echter samenwerken om de build- en deployment-, omgevingsprovisioning- en regressietestprocessen te automatiseren. De ontwikkelaars nemen integratie- en regressietesten op in hun dagelijkse werk waardoor deze fasen volledig vervallen. Op deze manier vermijden we ook de grote hoeveelheden herwerk die de gefaseerde aanpak teisteren.
Wanneer ontwikkelaars geautomatiseerde tools hebben die fouten binnen enkele minuten ontdekken, kunnen zij zich concentreren op testactiviteiten op een hoger niveau, zoals verkennende tests, bruikbaarheidstests en prestatie- en beveiligingstests. Door een deployment pijplijn op te bouwen, kunnen zij deze activiteiten tijdens het leveringsproces continu uitvoeren, zodat vanaf het begin kwaliteit in software wordt ingebouwd.
Succesvolle software zal in de loop van tijd evolueren. Door te investeren in build-, test-, deployment- en omgevingsautomatisering, verlagen we de kosten voor het maken en leveren van incrementele wijzigingen aan software aanzienlijk. Veel van de vaste kosten die gepaard gaan met het releaseproces elimineren we namelijk.
Dankzij de Continuous Delivery Pipeline is het economisch haalbaar om in kleine batches te werken. Het grote voordeel is dat we tijdens de deployment voortdurend feedback krijgen van gebruikers op basis van werkende software. Technieken zoals A/B-testen stellen ons in staat om ideeën met gebruikers kunnen testen voordat we hele functies uitwerken. Dit betekent dat we functies die we bouwen die geen waarde voor ons bedrijf hebben, kunnen vermijden.
Onderzoek heeft aangetoond dat Continuous Delivery releases minder pijnlijk maakt en de burn-out van het team vermindert. Bovendien kunnen deployment teams, wanneer we vaker releasen, actiever met gebruikers omgaan, leren welke ideeën werken en welke niet, en uit de eerste hand feedback krijgen over het werk dat ze hebben gedaan.
Branching is een techniek voor ontwikkelaars die deployment via een Continuous Delivery pipeline mogelijk maakt met behulp van tooling. Deze tools omvatten een source-control vertakkingsmodel, waarbij ontwikkelaars samenwerken aan code in één vertakking genaamd ’trunk’. Ondanks goed gedocumenteerde technieken leggen andere langlevende ontwikkelingsvertakkingen het af tegen deze tooling. |
Deze technologie is een belangrijke factor voor Continuous Delivery en Continuous Integration. Wanneer ontwikkelaars hun wijzigingen meerdere keren per dag in de trunk vastleggen, kunnen ze gemakkelijk voldoen aan de kernvereiste van Continuous Integration dat alle teamleden ten minste eenmaal per 24 uur aan de trunk bijdragen. Dit zorgt ervoor dat we de codebase altijd op afroep kunnen vrijgeven en op die manier Continuous Delivery te realiseren.
Het verschil tussen Trunk Based Development in een klein team en geschaalde Trunk Based Development is afhankelijk van de teamgrootte en de mate van commitment. Over het precieze punt waarop een ontwikkelteam niet langer ‘klein’ is en overgaat naar ‘geschaald’, valt te discussiëren. In beide gevallen voeren teams echter een volledige “pre-integratie” build uit (compileren, unit-tests, integratietests) op hun ontwikkelwerkstations voordat ze committen / pushen zodat anderen (of bots) het kunnen zien.
Canary Deployment is een deployment-strategie die een applicatie of service incrementeel vrijgeeft aan een subset van gebruikers. Alle infrastructuur in een doelomgeving wordt in kleine fasen geüpdatet. Een kanarie-release is vanwege deze controle het minst risicogevoelig, vergeleken met alle andere implementatiestrategieën.
Kubernetes, ook bekend als K8s, is een open-sourcesysteem voor het automatiseren van deployment, schaling en beheer van gecontaineriseerde applicaties.
Het groepeert containers waaruit een applicatie bestaat in logische eenheden voor eenvoudig beheer. Kubernetes bouwt voort op 15 jaar ervaring met het uitvoeren van productieworkloads bij Google, gecombineerd met de beste ideeën en practices van de community.
Trunk Based Development is geen nieuw branching model. Het woord ‘stam’ verwijst naar het concept van een groeiende boom, waarbij de dikste en langste overspanning de stam is, niet de takken die eruit voortkomen en een beperktere lengte hebben.
Trunk Based Development is een minder bekend vertakkingsmodel dat sinds het midden van de jaren negentig en tactisch gezien sinds de jaren tachtig bestaat. Grote ontwikkelingsorganisaties, zoals Google en Facebook voeren het als onderdeel van Trunk based development op grote schaal uit. Meer dan 30 jaar hebben de ontwikkeling van gerelateerde tools en technieken ervoor gezorgd dat Trunk-Based Development gangbaar is geworden. Het is een vertakkend model waar velen door de jaren heen aan hebben vastgehouden en nu vaak de basis vormt voor Continuous Delivery.
Mogelijk is dit een vertaling van Google Translate en kan fouten bevatten. Klik hier om mee te helpen met het verbeteren van vertalingen.