Må ikke forveksles med Kontinuerlig utrulling.
**Kontinuerlig leveranse** (engelsk: *continuous delivery*, CD) er en tilnærming til programvareutvikling hvor man produserer programvare i korte sykluser slik at pålitelig programvare kan bli utgitt når som helst, og på en slik måte at man slipper å gjøre det manuelt når man bestemmer seg for at en utgivelse skal slippes. Det tar sikte på å bygge, teste og gi ut programvare med høyere hastighet og frekvens. Tilnærmingen bidrar til å redusere kostnader, tid og risiko ved å levere endringer gjennom å tillate flere inkrementelle oppdateringer av applikasjoner i produksjon. En enkel og repeterbar utrullingsprosess er viktig for kontinuerlig leveranse.

Kontinuerlig leveranse står i kontrast til kontinuerlig utrulling (også forkortet CD på engelsk) som er en lignende tilnærming hvor programvare også produseres i korte sykluser, men gjennom automatisert istedet for manuell utrulling.

Forhold til DevOps
------------------

Kontinuerlig leveranse og DevOps har lignende betydninger og brukes ofte sammen, men er to forskjellige begreper.

DevOps favner bredere og fokuserer på kulturell forandring, særlig samarbeidet mellom de ulike lagene som er involvert i programvareleveransen (utviklere, drift, kvalitetssikring, ledelse, etc.), samt automatisering av prosessene i programvareleveranse.

Kontinuerlig leveranse er derimot en tilnærming til å automatisere leveranseaspektet, og fokuserer på å samle sammen ulike prosesser og utføre dem raskere og oftere. Dermed kan DevOps være et produkt av kontinuerlig leveranse, og kontinuerlig leveranse flyter direkte inn I DevOps.

Forholdet til kontinuerlig utrulling
------------------------------------

Kontinuerlig leveranse er evnen til å levere programvare som kan utrulles når som helst gjennom manuelle utrullinger, dette er i motsetning til kontinuerlig utrulling som bruker automatiserte utrullinger. Ifølge Martin Fowler er det en forutsetning for kontinuerlig utrulling at kontinuerlig leveranse ligger i bunn. I akademisk litteratur skilles det mellom de to tilnærmingene som manuell vs. automatisert utrullingsmetode.

Prinsipper
----------

En kommandokø for utrulling eller utrullingskø (*deployment pipeline*) en viktig komponent i kontinuerlig leveranse, og fungerer som en slags *poka-yoke* (metode som retter oppmerksomheten mot feil når de oppstår). Denne kanalen kan inneholde en mengde valideringer programvaren må bestå før den utgis. Koden blir kompilert dersom nødvendig, og pakkes deretter av en byggeserver hver gang en endring blir sendt inn (*committed*) til kildekodelageret (*source control repository*), hvorpå den blir testet ved hjelp av en rekke forskjellige teknikker (muligens inkludert manuell testing) før den kan merkes som utgivbar. 



Utviklere som er vant med lange utviklingssykluser må kanskje endre tankegangen når de arbeider i et CD-miljø. For eksempel er det viktig å være klar over at all kode som sendes inn til kodelageret kan frigis til kunder når som helst. Egenskaper som funksjonsbrytere (mulighet for å aktivere og deaktivere en funksjon) kan være nyttig for å sende inn kode som enda ikke er klar for bruk av sluttbrukere. Bruk av NoSQL kan eliminere steget med dataoverføringer og skjemaendringer, som ellers ofte er manuelle trinn og slik avviker fra en arbeidsflyt med kontinuerlig leveranse. Andre nyttige teknikker for å utvikle kode i isolasjon som kodeforgrening kan fortsatt brukes med CD-verden, men må tilpasses. For eksempel kan det vise seg upraktisk å ha flere langlivede kodeforgreninger ettersom en utgivbar artefakt må være bygd tidlig i CD-prosessen fra en enkelt kodeforgrening dersom den skal kunne komme gjennom alle stegene i utrullingskøen.[]

Kommandokø for utrulling (*deployment pipeline*)
------------------------------------------------

Kontinuerlig leveranse blir gjort mulig ved help av en utrullingskø. Noen fordeler med å kjøre dette gjennom en kommandokø er synlighet, tilbakemelding og kontinuerlig utrulling.

* **Synlighet** - Alle aspekter av leveransesystemet, inkludert bygging, utrulling, testing og utgivelse, er synlig for alle medlemmer av laget for å fremme samarbeid.
* **Tilbakemelding** - Teammedlemmer blir kjent med problemer så snart de oppstår slik at man kan fikse dem raskere.
* **Kontinuerlig utrulling** – Gjennom en helautomatisert prosess kan man distribuere og gi ut en hvilken som helst versjon av programvaren til ethvert programvaremiljø.

Verktøy
-------

Kontinuerlig leveranse automatiserer hele prosessen fra kildekontroll til produksjon, og det finnes ulike verktøy som for hele eller deler av denne prosessen. Disse verktøyene kan utgjøre en del av en utrullingkø som inkluderer kontinuerlig leveranse. Eksempler på typer av verktøy som kan utføre ulike deler av prosessen inkluderer: kontinuerlig integrasjon, automatisering av applikasjonsutgivelse, automatisert byggesystem og håndtering av applikasjonslivssyklus.

Arkitektur for kontinuerlig leveranse
-------------------------------------

For at kontinuerlig leveranse skal utøves effektivt må programvaren tilfredsstille en mengde arkitekturmessigt viktige krav som utrullbarhet, modifiserbarhet og testbarhet. Disse arkitekturmessige kravene krever høy prioritet og kan ikke tas lett på.

Mikrotjenester brukes ofte når man designer en arkitektur for kontinuerlig leveranse. Bruk av mikrotjenester kan øke et programvaresystem sin utrullbarhet og modifiserbarhet. Observerte forbedringer av utrulling inkluderer: uavhengig utrulling, kortere utrullingstid, enklere utrullingsprosedyrer og null nedetid. Observerte forbedringer av modifiserbarhet inkluderer: kortere syklustid for små inkrementelle funksjonelle endringer, enklere endringer av teknologivalg, inkrementelle endringer av kvalitetsattributter, og enklere oppgraderinger av språk og biblioteker.

Se også
-------

* DevOps
* CI/CD
* Kontinuerlig integrasjon
* Utgivelseshåndtering
* Versjonskontroll

Referanser
----------

1. ↑  «Menneskelige hensyn ved kontinuerlig utrulling». *Capgemini Norge* **(engelsk)**. 12. desember 2013. Besøkt 4. august 2022.
2. ↑  «DevOps». *Miles* **(engelsk)**. Besøkt 4. august 2022.
3. ↑  Skifte, Anders (2. april 2019). «Oppsummering av Accelerate: The Science of Lean Software and DevOps». *Smidigalliansen* **(engelsk)**. Besøkt 4. august 2022.
4. ↑  Chen, Lianping (2015). «Continuous Delivery: Huge Benefits, but Challenges Too». *IEEE Software*. doi:10.1109/MS.2015.27.
5. 1 2  Shahin, Mojtaba; Ali Babara (2017). «Continuous Integration, Delivery and Deployment: A Systematic Review on Approaches, Tools, Challenges and Practices». *IEEE Access*. doi:10.1109/ACCESS.2017.2685629.
6. ↑  «Aktuelt | DevOps er den usynlige brukeropplevelsen». *fortedigital.no*. Besøkt 4. august 2022.
7. ↑  Hammond, Jeffrey (9. september 2011). «The Relationship between DevOps and Continuous Delivery». *Forrester Research*. Forester.
8. ↑  «Hvordan få full gevinst av DevOps». *Lemontree*. Arkivert fra originalen 4. august 2022. Besøkt 4. august 2022.
9. 1 2  Humble, Jez; Farley, David (2011). *Continuous Delivery: reliable software releases through build, test, and deployment automation*. Pearson Education Inc. ISBN 978-0-321-60191-9.
10. ↑  Swartout, Paul (2012). *Continuous Delivery and DevOps: A Quickstart guide*. Packt Publishing. ISBN 978-1849693684.
11. ↑  «Continuous Delivery: Overcoming adoption challenges».
12. ↑  «bliki: ContinuousDelivery». Besøkt 29. oktober 2015.
13. ↑  Shahin, Mojtaba; Babar, Muhammad Ali; Zahedi, Mansooreh; Zhu, Liming. «Beyond Continuous Delivery: An Empirical Investigation of Continuous Deployment Challenges». *2017 ACM/IEEE International Symposium on Empirical Software Engineering and Measurement (ESEM)*. ISBN 978-1-5090-4039-1. doi:10.1109/ESEM.2017.18.
14. ↑  «Referat fra møte i brukerutvalget ved NAV Hjelpemiddelsentral Øst-Viken 18.11.20.» (PDF).
15. ↑  Humble, J.; Read, C.; North, D. «The Deployment Production Line». *Agile 2006 (Agile'06)*. ISBN 0-7695-2562-8. doi:10.1109/AGILE.2006.53.
16. ↑   (PDF). ISBN 978-1-4503-2856-2. doi:10.1145/2593812.2593813 .  Manglende eller tom `|tittel=` (hjelp)
17. ↑  Kluge, Lars. «Continuous Deployment with MongoDB at Kitchensurfing». Besøkt 3. januar 2014.
18. ↑  Duvall, Paul (2012). «Continuous Delivery: Patterns and Anti-Patterns in Software Lifecycle» (PDF). *Refcardz*. Arkivert fra originalen (PDF) 19. juni 2018. Besøkt 4. august 2022.
19. ↑  Phillips, Andrew (29. juli 2014). «The Continuous Delivery Pipeline – What it is and Why it's so important in Developing Software».
20. ↑  Binstock, Andrew (16. september 2014). «Continuous Delivery: The Agile SUccessor».
21. ↑ . doi:10.1109/WICSA.2015.23.  Manglende eller tom `|tittel=` (hjelp)
22. 1 2   .  Manglende eller tom `|tittel=` (hjelp)

Eksterne lenker
---------------

* Video: Skifte motor i fart - fra fossefall til kontinuerlig leveranse med 200 passasjerer (av *JavaZone* på *Vimeo.com*)