Begreppet DevOps har blivit ett populärt uttryck, men dess innebörd varierar avsevärt från person till person.
Att fullständigt förstå och definiera vad DevOps faktiskt innebär kan vara komplicerat. Om man däremot bekantar sig med de grundläggande principerna som oftast associeras med DevOps, samt med dess historiska utveckling, kan man skapa sig en mer nyanserad bild.
DevOps – Ursprunget
DevOps kan ses som ett typexempel på agil programvaruutveckling. Behovet av DevOps uppstod som en följd av det ökade tempot inom programvaruutveckling, ett tempo som de agila metoderna bidrog till att upprätthålla. De betydande framstegen inom agil kultur och praxis under de senaste tio åren har tydliggjort behovet av ett mer omfattande grepp om hela livscykeln för programvaruleveranser.
Du kanske undrar, vad är agil programvaruutveckling egentligen? –
Agil utveckling är ett samlingsnamn för olika iterativa och inkrementella metoder för programvaruutveckling. Några välkända agila metoder är Scrum, Kanban, Scaled Agile Framework® (SAFe®), Lean Development och Extreme Programming (XP).
Kärnvärdena och visionen är desamma för alla dessa metoder, men de skiljer sig åt i sitt praktiska genomförande. Gemensamt för dem alla är användningen av iterationer och kontinuerlig feedback för att framgångsrikt utveckla och leverera anpassningsbar programvara. De involverar även fortlöpande planering, testning, integration samt andra kontinuerliga processer för både projekt och programvara.
I motsats till traditionella vattenfallsmodeller är dessa agila metoder flexibla och anpassningsbara. En av de största fördelarna med dem är att de alla fokuserar på att uppmuntra samarbete och snabba beslut.
Bild från Segue
DevOps-idealet innebär en utvidgning av den agila utvecklingsmetoden, med målet att effektivisera hanteringen av programvaruförändringar genom bygg-, validerings-, distributions- och leveransprocesserna. Detta ger de tvärfunktionella teamen ett fullständigt ägarskap över programvaran, från design till produktion.
Utmaningar som DevOps adresserar
Distributionsprocessen – Distribution av applikationer kräver ofta att binära filer och konfigurationsfiler levereras till ett flertal servrar. Detta blir mer komplicerat om man har en stor serverpark. Att få en överblick över vad, hur och var distributionen ska ske är inte alltid lätt. Det självklara resultatet?
Långa väntetider på att artefakterna ska nå nästa steg i processen, vilket försenar allt från tester till leverans.
DevOps underlättar för mjukvaru- eller webbutvecklare och IT-drift att arbeta tillsammans under distributionsprocessen. Detta möjliggör verifiering av vad som fungerar och därefter automatisering av processerna för att åstadkomma kontinuerlig utveckling, vilket i sin tur skapar förutsättningar för snabbare utveckling.
DevOps – Mål
DevOps strävar efter att förbättra samarbetet mellan intressenter från planering till leverans och att automatisera leveransprocessen, detta för att:
- Öka distributionsfrekvensen
- Förkorta tiden till marknadsintroduktion
- Minska antalet fel i nya versioner
- Korta tiden mellan korrigeringar
- Förbättra återhämtningstiden efter problem
Ett typiskt DevOps-scenario
Innan ett nytt programvaruprojekt påbörjas samlas alla berörda parter. Teamet består av utvecklare, testare, drift- och supportpersonal. Tillsammans planerar de hur de ska skapa fullt fungerande programvara som är redo för driftsättning.
Ny kod distribueras dagligen i takt med att utvecklarna slutför den. Automatiska testprocedurer säkerställer att koden är redo för implementering. När automatiska tester ger klartecken distribueras koden till en liten grupp användare. Under en kort period övervakas koden för att säkerställa stabilitet och att inga oförutsedda problem uppstår. Om övervakningen visar att koden är stabil, distribueras den till resten av användarna. En stor del av stegen efter planering och utveckling utförs utan manuell inblandning.
Mognadsstadier inom DevOps
DevOps-mognad utvecklas i olika stadier. Här är några viktiga steg att känna till.
Vattenfallsutveckling
Innan kontinuerlig integration blev standard skrev utvecklingsteamen stora mängder kod, som sedan slogs ihop inför lanseringen. Versionerna av koden skilde sig så mycket åt att de krävde ett stort antal korrigeringar.
Att göra dessa korrigeringar kunde ta flera månader, vilket gjorde processen ineffektiv.
Kontinuerlig integration
Detta innebär att snabbt integrera nyutvecklad kod med huvudkoden som ska lanseras. Kontinuerlig utveckling sparar mycket tid vid lansering av kod.
DevOps introducerade inte detta begrepp. Kontinuerlig integration är en agil ingenjörsmetod som kommer från Extreme Programming-metoden. DevOps har anpassat metoden eftersom automatisering är en förutsättning för en lyckad kontinuerlig integration. Kontinuerlig integration är ofta det första steget i DevOps-mognad.
I DevOps-kontexten omfattar kontinuerlig integration steg som att kontrollera koden, kompilera den till användbar kod samt köra nödvändiga valideringstester.
Kontinuerlig leverans
Detta är en utökning av kontinuerlig integration och det andra DevOps-steget.
Kontinuerlig leverans möjliggör ytterligare automatisering och testning, vilket innebär att koden inte bara snabbt integreras med huvudkoden utan även att den nästan är redo för distribution utan manuell hantering.
Det är en praxis som syftar till att alltid ha kodbasen i ett distributionsklart tillstånd.
Kontinuerlig distribution
Kontinuerlig distribution är en vidareutveckling av kontinuerlig leverans. Denna metod gör det möjligt att distribuera alla ändringar till produktionsmiljön utan manuell inblandning.
Team som arbetar med kontinuerlig utveckling distribuerar aldrig kod utan att testa den. All ny kod genomgår automatiska tester innan den släpps till produktionsmiljön. Koden distribueras till ett litet antal användare och det finns en automatisk återkopplingsslinga som övervakar kvaliteten och användningen innan koden går vidare.
Ett mindre antal företag som Netflix, Etsy, Amazon, Pinterest, Flickr, IMVU, Google m.fl. arbetar med kontinuerlig utveckling.
Värdet
DevOps lägger stor vikt vid att utveckla en samarbetsorienterad kultur och förbättra effektiviteten genom automatisering med hjälp av olika DevOps-verktyg. För att implementera DevOps framgångsrikt krävs en kombination av både kultur och verktyg.
DevOps-kultur
DevOps är en kultur som syftar till att förbättra samarbetet, minska oordning, fördela ansvaret på ett bättre sätt, införa automatisering, förbättra kvaliteten, samla in feedback och öka automatiseringsgraden.
Agila metoder har länge varit det bästa helhetsgreppet vid programvaruleverans. När det gäller att mäta framsteg utgår agila utvecklingsteam från fungerande programvara. DevOps-kulturen i de agila metoderna möjliggör för produktägare, utvecklare, testare och UX-experter att arbeta tätt tillsammans mot ett gemensamt mål.
DevOps-verktyg
Dessa inkluderar verktyg för konfigurationshantering, testning och systembyggande, applikationsutveckling, versionshantering och övervakning. Införandet av kontinuerlig integration, kontinuerlig leverans och kontinuerlig distribution kräver olika verktyg, men ofta används samma verktyg på flera platser. I takt med att man rör sig framåt i leveranskedjan ökar behovet av fler verktyg.
Nedan följer några vanliga verktyg och metoder.
Källkodsförråd – Detta är en plats där utvecklare kan checka in och ändra koden. Källkodsförrådet hanterar olika versioner av koden som checkas in för att förhindra att utvecklare skriver över varandras kod.
Git, Apache Subversion, IBM Rational, Artifactory, Nexus och Eclipse är exempel på vanliga verktyg för kodlagring.
Byggserver: – Byggservern är det automatiseringsverktyg som används för att kompilera koden i källkodsförrådet till en körbar kodbas. Några av de mest använda byggserververktygen är Jenkins, SonarQube och Artifactory.
Konfigurationshantering – Puppet, Chef, Ansible, SaltStack och Run Deck hjälper till att hantera konfigurationen för applikationen och infrastrukturen för att upprätthålla en jämn miljö.
Virtuell infrastruktur – AWS, GCP och Azure är de tre främsta leverantörerna av publika molntjänster som erbjuder nästan alla typer av infrastrukturtjänster. De tillhandahåller API:er som möjliggör provisionering och hantering av infrastrukturen som kod.
Slutsats
Jag hoppas att detta har gett dig en översikt över DevOps. Om du är intresserad kan du utforska den här online-masterkursen.
Artikel av Payal Goyal