Verktyg vi använder i utvecklingsteam

Hur kan tillvaron avseende verktyg i ett utvecklingsteam se ut, specifikt om teamet och organisationen arbetar enligt en devops-modell? Det finns en mängd verktyg att tillgå, men hur hänger de ihop och i vilken mån behöver jag bry mig om eller förstå hur de hänger ihop?

I den här artikeln går jag igenom vilka typiska verktyg vi stött på i team som vill leverera ofta.

Några ord om begreppet ”devops”

Jag tycker mig höra ordet något mer sällan nu än för några år sedan. Det beror nog inte på att populariteten minskat utan snarare att allt fler redan påbörjat eller avslutat resan mot devops. Däremot pratas det mer om att kunna göra release och deploy ”oftare”, vilket i praktiken är det många menar med uttrycket devops.

Utan att gå in på detaljer känns det viktigt att nämna hur devops utförs i praktiken ser olika ut för olika team. För vissa ska varje ”commit” direkt ut i produktion men för de flesta sker en uppsamling allt från dagligen upp till varannan vecka av olika verksamhets-orsaker.

Längst ner i artikeln hittar du verktygen mappade för respektive del i DevOps-kedjan.

Kod

Att skriva och hantera kod professionellt innebär att ett val av versionshanteringssystem måste göras om det inte redan är gjort. Idag används git i princip överallt och då ofta i form av produkterna bitbucket eller github där det går att skapa konton och kollaborera.

Det finns fortfarande de som använder till exempel subversion men i ett nytt projekt är git mer eller mindre de facto-standard.

Syftet med ett versionshanteringssystem är i grunden det som namnet antyder, att hantera och spara gamla versioner av koden för att kunna analysera och återskapa äldre versioner. Men en fundamental aspekt är också vilken ”branch-strategi” som väljs. Detta för att flera personer på bästa sätt ska kunna producera kod parallellt och sedan få ihop det inför leverans. Vi kommer inte att gå igenom ämnet här utan vill bara peka på vikten av att fördjupa sig i det. Val av branch-strategi är inte i första hand ett verktygsval men bör behandlas med samma signifikans som när du väljer verktyg.

Bygge

Att bygga, det vill säga göra ”build” innebär också val av verktyg.

Det är ofta olika ”triggers” i versionshanteringssystemet som används för att sparka igång byggen. Till exempel kan triggers definieras tillsammans med kommandot git push. Idén är att deploy-processen endast ska fortsätta om bygget inklusive tester och analyser går igenom och accepteras.

Verktyget som skapar körbara moduler bestäms vanligtvis av vilket programmeringsspråk som används. Men det finns många val när det kommer till att enhetstesta koden och bygget. Jag betraktar utförandet av enhetstester som en del av bygget.

Under bygget utförs ibland även statisk kodanalys av verktyg som till exempel sonarQube.

Kontinuerlig integration

När bygget väl gått igenom kommer vi att vilja utföra andra steg som att deploya på testmiljöer och utföra andra typer av tester. Det är då läge att nämna begreppet Kontinuerlig Integration, eller ”Continuous Integration” som vi säger på ren svenska. Det kan beskrivas som att det vid givna operationer ”rasslar till” och triggar ytterligare automatiska steg som i sin tur ser till att allt hänger ihop på ett bra sätt. Detta brukar liknas vid en pipeline och kräver också sitt verktygsval.

Vill för övrigt hellre kalla ”pipeline” för ”assembly line” där bygget bara är en av de första stationerna på denna ”assembly line”. Men för enkelhetens skull använder jag begreppet pipeline framöver.

Skriptning

I en pipeline är det en hel del som normalt skriptas, antingen i klassisk ”shell scripting” som till exempel bash eller i något annat skriptspråk som Powershell.

Drift

Hur vi har valt att drifta lösningen i slutändan påverkar hur driftsättningen går till i hela kedjan och om vi till exempel använder en container-teknologi som Docker eller inte. Detta är ytterligare en aspekt vi bara nuddar vid här men som också är värd att känna till och fördjupa sig i.

Det finns orkestreringsverktyg som underlättar driftsättning. Två exempel är Kubernetes och varianter som OpenShift som kan hantera Docker-containers.

Pipelines

För utveckling i Java är Jenkins och Maven nedan vanliga verktyg.

I jämförelse med Jenkins känns GitHub Actions och Bitbucket Pipelines enklare att komma igång med och arbeta med men då ska jag erkänna att det var ett tag sedan jag jobbade med Jenkins och det kan ha hänt saker.

Exempel på vanliga pipeline-verktyg:

Test

Tester i allmänhet kan utföras i flera om inte i alla steg från ax till limpa under bygget. Här sätts strålkastarljuset på verktyg för de tester som utförs när något driftsatts i en miljö som antingen är en testmiljö eller kanske själva produktionsmiljön. Det kan också innefatta tester på utvecklarens egen dator efter att ha spunnit upp en server lokalt.

Testa via web-browser

Testverktyg för att automatisera och likna användarinteraktioner med webb-läsare. Vi har nämnt några av dessa fördjupat i tidigare artiklar.

Testa via api-er

Nedan följer exempel på testverktyg och ramverk för att automatisera api-anrop. Det finns ingenting som hindrar att denna typ av tester skrivs i ren kod av något slag som till exempel i Python. Det kan också finnas hjälpramverk i sådana fall som med exemplet Mocha för Node nedan.

  • SoapUI: Används sedan länge av många. Stödjer fler protokoll än bara Soap. https://www.soapui.org/tools/soapui/
  • ReadyAPI: Härstammar från samma företag som gjort SoapUI, dvs Smartbear. Har inte använt det själv men är enligt information mer integrerbart med pipelines och kan också användas för att lasta. https://support.smartbear.com/readyapi/
  • JMeter: Ett klassiskt verktyg för prestandatest och kan användas till mycket. https://jmeter.apache.org/
  • Postman: Ett klassiskt verktyg för att snabbt testa api’er manuellt. Har med tiden blivit allt mer avancerat. Nu för tiden finns även Newman som kan köra postman-kollektioner via skript. https://www.postman.com/
  • Mocha: Ett exempel på Node.js-ramverk för test. Det finns en uppsjö av paket som går att använda för själva rest-api-anropet om det nu är rest som ska testas. Dessa paket är förvisso inte direkt relaterade till just Mocha. Ett exempel av många på att kunna göra api-anrop är via Chai-http som i sin tur går hand i hand med Chai Assertions Library. https://mochajs.org/, https://github.com/chaijs/chai-http#readme, https://www.chaijs.com/

Testresultat

För att publicera och tydliggöra testresultat finns integrationer av olika slag till tidigare valda verktyg i kedjan.

Det finns kopplingar från pipeline-verktyg till Teams och Slack. Det går att göra egna ”dashboards” i verktyg som Jenkins och Azure. Ett varningen finger är att det kan bli rörigt och en viss underhållsbörda om samma testresultat skickas åt många olika håll. Om resultatet går till en enda kanal eller en enda anslagstavla lär vi oss att titta just där och det blir ett tydligt ”go to”-ställe.

Kontinuerlig leverans

Det vill säga ”Continuous Delivery” eller CD, handlar om att driftsätta i både testmiljöer och i produktion med större mått av automatik.  Detta innebär att fler kan tänkas ha åsikter om vad som är lämpligt att göra och när det ska göras. Min egen reflektion i sammanhanget är att det handlar om förtroende. Om utvecklingsteamet kan visa på förutsägbarhet och kvalitet kommer affärsverksamheten att få förtroende och våga släppa sargen. Då kan vi leverera oftare och kanske till och med driftsätta med friare tyglar.

I princip är alla verktygsval redan gjorda och det handlar mer om hur långt organisationen vill att automationen ska gå.

Monitorering och loggning

Det finns också verktyg för att monitorera och läsa loggar. Ofta skapas loggfiler distribuerat på flera olika servrar och då är det trevligt att få en konsoliderad bild. Exempel på verktyg:

Sammanfattning

Det finns många verktyg och många sätt att göra saker på. Ämnet i sig är ett rörligt mål och jag tror vi är bra rustade för förändring genom att konstant hålla ögonen öppna och dela information och erfarenheter mellan oss. Genom att ta del av exemplen i denna artikel hoppas jag sprida ljus över hur det går till i många utvecklings-team just idag.

 

Verktyg - DevOps. 18.20.12

 

HÄMTA BILDEN SOM PDF

 

Alla blogginlägg

Vi rekommenderar också