Kontinuerlig leverans
Innehållsförteckning
Vad är kontinuerlig leverans?
Kontinuerlig leverans, continuous delivery (CD) på engelska, är en mjukvaruutvecklingsprocess som går ut på att få kodändringar i produktion snabbt, säkert och med högre kvalitet, vanligtvis med hjälp av verktyg för att automatisera distributionerna. Ingenjörsteam gör ändringar i sin programvara i korta cykler, så att den kan testas och lanseras oftare. Detta tillvägagångssätt möjliggör inkrementella förändringar med både lägre kostnader och risker. Metoden populariserades först av Jez Humble och David Farley i deras bok Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation.
Hur fungerar kontinuerlig leverans?
Här är en uppdelning av processen för kontinuerlig leverans:
- Kontinuerlig integration (CI): Team implementerar kodändringar i ett delat arkiv ofta. Automatiserade tester körs på dessa ändringar för att säkerställa att kodbasen förblir funktionell.
- Automatiserade byggnationer: Varje gång ny kod överförs startar en automatiserad byggprocess som kompilerar kod och skapar körbara artefakter.
- Automatiserad testning: Automatiserade tester (enhetstester, integrationstester etc.) validerar kodens funktionalitet. Om testerna godkänns går koden vidare.
- Pipeline för distribution: Kod som har klarat testerna flyttas genom en deployment-pipeline. Denna pipeline består av steg som staging, testning och produktion.
- Automatiserad driftsättning: Om kodändringar klarar alla steg driftsättes de automatiskt till produktion eller en produktionsliknande miljö.
Varför du behöver både kontinuerlig leverans och A/B-testning
Kontinuerlig leverans säkerställer effektiv programvarudistribution, medan A/B-testning validerar ändringar och säkerställer att de uppfyller användarnas behov. Genom att implementera båda delarna får du en högkvalitativ programvara som drivs av feedback från användare och datainsikter.
-
Kvalitetssäkring
CD levererar uppdateringar snabbt, medan A/B-testning validerar ändringar med verkliga användardata, vilket säkerställer effektiva implementeringar som förbättrar användarupplevelsen. Uppdateringar kommer inte bara snabbt utan är också optimerade. -
Förbättring
Med A/B-testning kan teamen stegvis förfina CD-implementerade funktioner baserat på användarnas feedback, vilket leder till produkter med bättre prestanda. -
Datadrivna beslut
Genom att implementera A/B-testning i CD får du tidiga insikter som vägleder prioritering av funktioner och beslut om driftsättning.
Fördelar med kontinuerlig leverans
Nedan beskrivs de främsta fördelarna med en pipeline för kontinuerlig leverans i molnet.
-
Snabbhet till marknaden
Marknadsförhållandena är i ständig förändring i takt med att kundbeteendet förändras. Produkter kan plötsligt bli populära eller, lika plötsligt, bli mindre populära. Samtidigt kan tekniska framsteg också påverka behovet av att släppa förändringar snabbare till dina slutanvändare. För att kunna svara på oförutsägbara förändringar på marknaden och inom tekniken går det snabbare för ingenjörer att släppa programvara med hjälp av kontinuerlig leverans. -
Lägre risk
När inkrementella ändringar släpps oftare kan fel upptäckas och korrigeras tidigare i utvecklingsprocessen. Det är också lättare att rulla tillbaka mindre ändringar vid behov och det går att förhindra att oavsiktliga ändringar kommer in i produktionsmiljön genom versionshantering och användning av en staging-miljö. Att använda automatiserad testning och att dela upp tester i mindre enhetstester är andra bästa praxis inom DevOps som minskar driftstopp. -
Samordning och kommunikation mellan team
Med kontinuerliga leveranser delar teamen på ansvaret för programvaruleveransen. Detta bryter ner åtskilda grupper eller avdelningar och tar bort oförutsägbarheten och stressen från programvarulanseringar. Att distribuera mer frekventa releaser är en process som får teamet att arbeta i en regelbunden och förutsägbar takt. -
Snabbare inlärningscykel
Att släppa nya funktioner snabbare to market innebär snabbare feedback från dina kunder. Den här releaseprocessen gör det möjligt för dig att lära dig av dina kunder genom att de får fungerande programvara i sina händer tidigare, införliva deras feedback och göra justeringar av din produkt för att förbättra den.
Exempel på kontinuerlig leverans
Föreställ dig en e-handelsplattform som vill experimentera med ett nytt checkout-flöde för att förbättra konverteringsgraden.
- Idégenerering: Identifiera behovet av ett nytt checkout-flöde för att förbättra konverteringen.
- Utveckling: Skapa två versioner av checkout. A (nuvarande flöde) och B (nytt optimerat flöde)
- CI och deployment: Testa båda versionerna i en staging-miljö via kontinuerlig integration.
- A/B-testning: Använd funktionsväxlingar för att slumpmässigt styra användare till version A eller B.
- Datainsamling: Spåra användarmätvärden (konverteringsgrad, övergivande) i båda versionerna.
- Analys: Jämför prestandamätvärden för att avgöra vilket checkout-flöde som ger bäst resultat.
- Utrullning: Om version B utmärker sig, rulla ut den på hela plattformen via CD.
- Övervakning: Kontinuerligt övervaka och förfina det nya flödet baserat på feedback och data från användarna.
Kontinuerlig leverans & DevOps
Termerna "DevOps" är en kombination av "development" och "operations" och betecknar samarbetet mellan dessa två. DevOps har gemensamma mål och egenskaper med kontinuerlig leverans. Båda levererar små förändringar, förlitar sig på samarbete och samordning mellan team och har ett gemensamt mål om snabbare time to market.
För att förtydliga skillnaden mellan de två är DevOps en metod för att hjälpa företag att bygga och släppa programvara. Det är en metod som betonar samarbete och samordning mellan programvaruutvecklare och andra avdelningar på företaget. DevOps skapar en miljö där programvara kan utvecklas, testas och släppas snabbt och tillförlitligt.
Du kan tänka på DevOps som den större kraften och filosofin bakom tjänsten, medan kontinuerlig leverans är den process som levererar den i molnet.
Kontinuerlig leverans vs kontinuerlig integration
I traditionell mjukvaruutveckling sker integrationsprocessen i slutet av ett projekt efter att varje person har avslutat sitt arbete. Den här processen kan ta lång tid och vara frustrerande för alla inblandade.
Kontinuerlig integration är en metod för programvaruutveckling som flyttar integrationsfasen uppåt i utvecklingscykeln så att utveckling, testning och integrering av kod sker med högre frekvens. Utvecklingsteamet sammanfogar kodändringar i ett gemensamt, centralt arkiv flera gånger om dagen för att kunna släppa en produktversion när som helst. Detta kräver en process för implementering som är reproducerbar och automatiserad.
Kontinuerlig leverans vs kontinuerlig driftsättning
Vid kontinuerlig driftsättning går alla programvaruändringar som klarar testningen automatiskt över till produktion. För att skapa en pipeline för kontinuerlig driftsättning måste ditt företag först gå över till kontinuerlig leverans.
Kontinuerlig driftsättning kan ses som en utökningsbarhet av kontinuerlig integration, med målet att minimera tiden mellan att ny kod skrivs och att den nya koden används i produktionskodbasen.
För att uppnå kontinuerlig driftsättning förlitar sig utvecklingsteamet på en rigorös process som automatiserar de olika stegen som leder fram till driftsättningen. När varje implementatör har uppfyllt kriterierna för lansering uppdateras live-applikationen med ny kod och en produktionsdistribution kan ske.
Agil utveckling och kontinuerlig leverans
Agil mjukvaruutveckling bygger på en uppsättning värderingar och principer som innebär att krav och lösningar utvecklas genom teamsamarbete. Det omfattar adaptiv planering, tidig leverans, kontinuerlig leverans och flexibel respons på förändringar. Inom agile finns det ingen fastställd tidsram för varje release, men tanken är att de ska ske ofta: kanske varannan vecka eller varannan månad, med en preferens för den kortare av de två.
I utvecklingen av processer för mjukvaruleveranser föregick agil utveckling kontinuerlig leverans.
Kontinuerlig leverans är en delmängd av agile där teamet håller sin programvara redo för lansering hela tiden under utvecklingen. Det handlar snarare om att utveckla på ett sådant sätt att programvaran alltid är redo att släppas - kontinuerligt.
Kontinuerlig leverans och A/B-testning
Experimentation och funktionshantering måste gå hand i hand. Experimentation är ett viktigt sätt för ditt företag att validera idéer innan nya produkter, funktioner och upplevelser lanseras för alla besökare. Med utvecklingsteam som använder kontinuerlig integration och kontinuerlig leverans kan feature flags som styr utrullningen av nya upplevelser minska risken för att lansera något obeprövat till alla på samma gång.
För att hjälpa till att hålla A/B-testning som en viktig del av din organisations distributionsprocess integrerar Optimizely Rollouts experiment ering på serversidan utrullning av funktioner, flaggor och variabler med experimentering, så att du kan kontrollera hela produktutvecklingslivscykeln på ett ställe. Genom att först köra en A/B-testning på en del av trafiken kan ditt team testa och gradvis optimera en ny funktion. När du har den bästa användarupplevelsen kan den rullas ut på ett kontrollerat sätt över hela din kundbas för att minska risken för tekniska problem med lanseringsprocessen.