Hvad er DevOps? (og hvad kræver det?)

devops

Hvad er DevOps?

Før vi når til at besvare spørgsmålet ”hvad er DevOps”, så lad os lige tage et kig på tal fra Google Trends her. Begrebet dukker op i slutningen af 2011 og mængden af søgninger rammer stabilt et niveau omkring 20% af det nuværende fra 2017 og frem. Fra midten af 2018 stiger mængden af søgninger eksponentielt og er steget med over 400% det sidste år. Interessen er klart samlet omkring hovedstaden mens Midtjylland er i indeks 46 af hovedstaden. Alle andre regioner er under indeks 40.

DevOps rider på en bølge af hype. En bølge, der lige nu skyller over København, og stille og roligt spreder sig til resten af landet. Som med så mange andre buzzwords, betyder det at definitionen skrider en smule i takt med at flere vil med på vognen. Vi ser også flere og flere af vores kunder, der efterspørger hjælp til at komme i gang. Og vi ser flere og flere forsøg på at implementere DevOps i en eller anden hjemmestrikket form.

Det er relevant at afklare:

Hvad mener vi at DevOps er?

DevOps dækker over ordene Development og Operations, og formålet er grundlæggende at gøre IT-organisationen mere sammenhængende, effektiv og sikker. Det sker, ved at sætte udviklere, testere og operations-folk sammen, og give dem fælles ansvar for at softwaren bliver bygget, kan køres og er til at holde i drift. Det giver en række afledte effekter, der er gavnlige i det store perspektiv.

DevOps er lige dele forandringsledelse og teknologi og er en naturlig forlængelse af agil softwareudvikling. Vores fokus er på den tekniske side, men det er vigtigt også at forstå en anden del af processen.

I den perfekte DevOps verden kan software deployes mange gange om dagen uden nedbrud og uden bekymringer. Når deployments bliver rutine, og systemerne er bygget, så det er nemt at rulle tilbage, falder blodtrykket markant hos udviklerne og time-to-market hastigheden stiger ligeså markant.

Det betyder at vi:

  • Kan levere nye features hurtigere
  • Får en mere stabil applikation
  • Undgår hektiske deployment dage

Hvad kræver det?

På den tekniske side, kræver DevOps et Continuous Delivery-setup, der gør os i stand til at sætte ændringer (nye features, fixes, roll backs eller andet) i produktion hurtigt, sikkert og vedvarende. Det sikrer at vi undgår deployment pain og hotfixes (du kan nemt rulle tilbage til seneste version, lave dit fixes og deploye igen – uden stress).

CD giver mulighed for at skalere teamet voldsomt, fordi processerne er blevet automatiserede.

Det er et kæmpe aktiv for forretningen og meget mere tilfredsstillende for udviklerne – og giver forbedret arbejdsklima.

Men – hvad med QA og Operations?

Ofte vil der stadig være et QA-team og et Operations team. De supporterer udviklerne med deres ekspertise og erfaring. Men det er udviklingsteamet, der tager systemet gennem udvikling, QA og Operations-trinnene.

Det eliminerer handovers og kobler QA og Operations af udviklernes release cyklus. QA og Operations kommer til at lave automation og monitorering, så vi kan sikre at alt går, som det skal. Med hyppigere deployment bliver QA og Operations på en måde endnu mere vigtige end tidligere.

Det næste skridt

Selv hvis vi er nået hertil, så er det ikke sikkert, at vi har den fart og behændighed i systemet, som vi gerne ville have. Hvis vi har en stor, monolitisk applikation med mange afhængigheder, så vil det stadig kræve en masse planlægning og koordinering – både for systemet og de teams der arbejder på det.

For at nå til det næste niveau, er vi nødt til at bryde systemet ned i selvstændige komponenter – også kendt som microservices. Dem kan du læse mere om her.

Med uafhængige komponenter vil du også kunne deploye individuelt, fordi hver enkelt komponenter har ansvaret for et afgrænset område (Single responsibility principle).

Men når det er på plads – så er der ikke længere nogen grund til at være organiseret i et team af udviklere…

DevOps er en helt ny verden

Dine udviklere er nu fordelt ud på flere teams (måske med hver udvikler som en del af flere forskellige teams), der kan arbejde uafhængigt af hinanden. De arbejder på softwarekomponenter, der har sin egen udviklingscyklus. Det giver os et ekstremt let og manøvrerbart system hvor alle teams og komponenter kan bevæge sig frem uafhængigt at hinanden og i deres eget tempo. Og vigtigst: det skalerer! Både i antallet af udviklere og på teknologien.

De enkelte tjenester kan eventuelt flyttes i skyen, erstattes af cloud-tjenester, flyttes til andre datacentre eller bygges i helt nye teknologier. Men selvfølgelig når du ikke dertil i et hug – det er en gradvis proces.

Med denne arkitektur og DevOps-processerne på plads, kan I komme til det forjættede land. Men lad os lige kigge på nogle flere kapaciteter, der støtter op om visionen:

Versionskontrol

Lidt firkantet så er vi nødt til at have alt under versionskontrol for at kunne automatisere. Vi automatiserer for at få en pålidelig proces, hvor vi ser samme resultater, hver eneste gang en proces kører. Det giver sig selv at koden skal være under versionskontrol, men også dine test og test data skal under versionskontrol. Det samme gælder for infrastruktur – med cloudteknologi kan du deklarativt konfigurere dine miljøer og dine deklarationer skal være under versionskontrol. Det giver os mulighed for at arbejde rigtig hurtigt.

Automatiseret deployment

Deployment skal være fuldt automatiseret – vi har brug for hurtige deployments, der kan gentages. Hvis du ikke kan acceptere downtime i dit setup, er du nødt til at bygge redundans ind i systemet.

Test Automatisering

Alle dine test skal være automatiserede med veldefineret testdækning og en pålidelig teststack. Vi læner os op ad ”Test Pyramid”  konceptet, hvor tests grupperes efter granularitet. Med hyppig deployment i DevOps, er det vigtigt at du har styr på dine tests.

Det er også vigtigt at forstå, hvordan tests virker og hvad vi kan forvente at de tester.

Sidst men ikke mindst – testmiljøer og data skal automatiseres og måske resettes fra tid til anden.

Continuous Integration

CI går på at sikre at alt arbejde er kompatibelt. Det betyder at koden bygges rigtigt, og at unit- og systemtests tests kører.

Trunk-baseret udvikling

Vi bruger Github flow og holder os til tre grundprincipper:

  • Vi bruger kun master og feature branches
  • Feature branches er kortlivede
  • Deploy så snart ændringer er lagt ind i master branch

Målet er at minimere mængden af arbejde, der ligger og venter på at komme i produktion.

DevOps kræver indbygget kvalitet

Selvom vi har strukturer på plads, der skal sikre kvaliteten, er det vigtigt at vi er disciplinerede og omhyggelige i vores arbejde. Det betyder at vi blandt andet arbejde med poka-yoke – et japansk begreb, der handler om at bygge systemer, hvor det ikke er muligt at bruge dem forkert.

Vi laver detaljerede code reviews, men allerede inden da, er det vigtigt at være skeptisk og konservativ og forvente det værste – der er ikke plads til cowboy-kodere her.

Løst koblet arkitektur

Når komponenterne kan deployes uafhængigt og har deres egne lifecycles, opnår vi en ekstrem fleksibilitet og manøvredygtighed i udviklingen. Her er nogle af faldgruberne delte datalagre, implicitte afhængigheder og breaking changes.

Empowered teams

For at undgå ventetid, mindske afhængigheder og forbedre arbejdsglæden hos de enkelte udviklere, er det en rigtig god idé at decentralisere så mange tekniske beslutninger som muligt. Med cloud-teknologi kan teams selv sætte nye miljøer op og bring nye tjenester i spil. Der er ingen grund til at skulle gennem en større bureaukratisk proces for at få servere på plads, teste en cloud-tjeneste af eller implementere noget middleware.

Det selvstyrende team kan bruge retrospectives til hurtigt og effektivt at blive enige om nye måder at løse opgaven på.

Overvågning

Med hyppig deployment, så bliver det meget vigtigt at have et godt overblik over systemet. Monitorering skal være centraliseret og nemt at gå til. Uden god overvågning, svarer det lidt til at køre bil uden at kigge på benzinmåleren – du skal nok finde ud af, når du er løbet tør, men det er nu alligevel sjovest at opdage 50km før du løber tør.

Målet er at opdage bugs i softwaren før brugerne rapporterer dem. Det gør I bedst med centraliseret logning og gode dashboards.

Det forjættede DevOps-land

Hvis du kommer i mål med de udfordringer, vi har beskrevet her, så vil du være nået til et helt nyt niveau i din softwareudvikling og -leverance. Kulturelt, teknisk og på procesniveau.

Mindre stress, tættere samarbejde, selvsikkerhed, og uendelig skalering er bare nogle få af de fordele, der følger med.

Vil du høre mere om DevOps, så skriv til os på mail@copenhagensoftware.com – så hjælper vi dig videre.