Den moderna DevOps-ingenjörens roll
Att vara en DevOps-ingenjör i dagens tekniska landskap är en komplex och krävande uppgift. Rollen kräver en bred teknisk kompetens och ett förhållningssätt som kombinerar utveckling och drift.
En modern DevOps-ingenjör förväntas vara bekant med flera programmeringsspråk som Node.js, Python och diverse skriptspråk. Det är också avgörande att ha en djup förståelse för hur testautomatisering integreras sömlöst i deploymentsprocesserna. Som en centralfigur i automatiserade flöden, är det viktigt att behärska grundläggande funktioner i olika molntjänster.
Trots den tekniska tyngden är det inte alltid de tekniska färdigheterna som brister hos DevOps-ingenjörer. Det visar sig att mjuka färdigheter, såsom kommunikation och samarbete, ofta väger tyngre än den renodlade tekniska expertisen.
Viktiga DevOps-färdigheter
Källa: devopsuniversity.org
En DevOps-ingenjörs roll inom ett Scrum-team kan vara intressant att observera. Ofta har de en översiktlig syn på det konkreta innehållet i de uppgifter teamet hanterar. Deras fokus ligger snarare på de tekniska aspekterna kring hur funktionaliteterna ska implementeras.
DevOps-ingenjörerna ansvarar för att integrera teamets arbete i en välfungerande distributionspipeline, samt att säkerställa att tester automatiseras och genomförs korrekt. Detta kräver mer än bara teknisk expertis. Kommunikation och samarbetsförmåga blir avgörande för att nå framgång. Låt oss titta närmare på de viktigaste färdigheterna en DevOps-ingenjör behöver.
Mjuka färdigheter
Den höga efterfrågan på mjuka färdigheter för DevOps-ingenjörer understryker vikten av samarbete inom agila team. Varför är det så viktigt? Här är några viktiga argument:
- En DevOps-ingenjör kan inte arbeta effektivt utan att vara väl synkad med resten av utvecklingsteamet. Det är utvecklingsteamet som bygger grunden för programvaran och det är upp till DevOps-ingenjören att se till att den fungerar i en driftsatt miljö.
- Utöver kontakten med det egna teamet fungerar DevOps-ingenjören ofta som kontaktperson mot externa intressenter som vill ha tillgång till plattformen. De måste kunna hantera förfrågningar och omvandla teknisk komplexitet i molnmiljön till en förståelig form för icke-tekniska intressenter. De fungerar som en länk mellan utvecklingsteamet och de externa parterna.
- Medan tekniska färdigheter kan tränas, kräver utveckling av mjuka färdigheter djupare introspektion och självreflektion. Att lära sig se på sig själv och identifiera utvecklingsområden kan vara en utmaning.
Nätverk
Att orientera sig i det tekniska landskapet med moderna molnplattformar kan vara överväldigande. En DevOps-ingenjör måste hantera filsystemstjänster, databaser, backend-API:er, serverbaserade eller serverlösa arkitekturer, front-end tjänster, maskininlärningsmodeller, hybridmiljöer, virtuella nätverk, lastbalanserare, streamingtjänster med mera.
Det är omöjligt att vara expert på allt, men det är nödvändigt för DevOps-ingenjörer att kunna knyta ihop alla delar till en fungerande plattform. Att bygga ett starkt nätverk av kontakter är ett måste.
En av utmaningarna för en DevOps-ingenjör är att hitta en balans mellan enkelhet och effektivitet i distribuerade system. De behöver vara redo att ge teamet lösningar på dessa komplexa utmaningar.
En mogen infrastruktur märks ofta genom de säkerhetsfrågor och utmaningar som uppstår på plattformen. Det är också ett ansvarsområde för DevOps-ingenjören. Istället för att förlita sig på gamla kontakter, är det viktigt att ständigt söka nya för att täcka behovet av nya tjänster i teamet.
Programvarutest
Flexibilitet i programvaruversioner är avgörande, särskilt i en agil miljö. Med tvåveckorssprintar förväntas en ny release varannan vecka. För att hantera hela projektets livscykel, från planering till release, är automatisering av tester nödvändig.
Förutsättningen för snabbare leverans till produktion är ett stort fokus på testautomatisering. Snabbare implementeringar och automatiserade tester gör att feedback från användare når utvecklarna snabbare.
För en DevOps-ingenjör innebär detta att integrera tester från olika team i en CI/CD-pipeline:
- Automatisera exekvering av enhetstester efter varje commit. Om sådana tester inte finns, behöver man samarbeta med utvecklarna för att skapa dem.
- Inkludera integrationstester i CI/CD-pipelines, och säkerställa att testerna körs i en dedikerad miljö där alla tjänster är utplacerade och data är konsistenta.
- Införliva end-to-end-tester i CI/CD-pipelinen. Gör detta obligatoriskt för varje distribution till integrations- eller testmiljöer för att säkerställa att viktiga affärsprocesser fungerar som de ska.
Att skriva effektiva testfall som inte är överdrivna, men som täcker alla kritiska processer, är en annan utmaning. DevOps-ingenjören behöver inte göra det här ensam. Affärsanalytiker och kvalitetsansvariga kan vara en del av teamet, eller nätverket, för att definiera de exakta stegen. DevOps-ingenjörens roll blir sedan att omvandla detta till körbar kod.
CI/CD och infrastruktur som kod
Infrastruktur som kod (IaC) och dess automatisering via CI/CD-pipelines är centralt för DevOps-ingenjörens arbete. Det är här ingångar från utvecklingsteamet, i form av olika tjänster, kopplas samman med infrastruktur. Resultatet är en fungerande mjukvarutjänst som kan distribueras till olika miljöer.
Detta är en stor utmaning för varje DevOps-ingenjör. Att vara oberoende av en specifik molnleverantör innebär ofta att man måste skriva IaC i Terraform, för att undvika leverantörsspecifika lösningar. Erfarenheten visar att övergången till molnoberoende infrastrukturkod kan vara svår även för erfarna ingenjörer.
Att underhålla infrastruktur med manuella steg är inte hållbart i en modern utvecklingsmiljö. Detta var standard i ”on-premise”-världen, men i en agil miljö är automatiserade distributioner nödvändigt. Övergången kan vara svår, men nödvändig.
När väl systemet är implementerat, får man många fördelar.
- Behövs en produktionsinstallation? Kör release-pipelinen som innehåller distributionen till produktion.
- Behövs en ny utvecklingsmiljö? Kör utvecklingspipelinen. All infrastruktur och testdata skapas automatiskt.
- När en miljö inte längre behövs, kan samma pipeline även förstöra alla tjänster som distribuerats till miljön.
Att implementera infrastruktur som kod i CI/CD-pipelines är avgörande för ett framgångsrikt agilt team. DevOps-ingenjören ser till att det blir verklighet.
Containerisering
Källa: aws.amazon.com
I storskaliga projekt är snabb replikering av miljöer avgörande. Containerisering gör det möjligt att skapa hundratals kopior av samma miljöer samtidigt. Containerisering kan vara svårt att lära sig, vilket förklarar varför många projekt inte implementerar det i större utsträckning.
En container är som en mall som kan användas flera gånger med samma resultat. Det är en egenskap som DevOps-ingenjören ansvarar för att bygga för teamet, genom att använda olika verktyg.
Containers är designade för att enkelt kunna skapas och förstöras. DevOps-ingenjörer implementerar containerorkestreringsverktyg som Kubernetes eller Docker Swarm för att hantera distribution, skalning och återställning av containers.
Containers delar samma värdoperativsystem, vilket innebär en risk om en container attackeras. Om containers byggs från tredjepartskällor, kan de innehålla sårbarheter. DevOps-ingenjörer ska därför implementera säkerhetsfunktioner som containerisolering, åtkomstkontroll och sårbarhetsskanning för att minska dessa risker.
Skalbarhet är en annan egenskap hos containers. De kan enkelt skalas horisontellt för att hantera ökad belastning. Detta kan leda till resurskonflikter. DevOps-ingenjören ska implementera verktyg för resurshantering som cgroups eller Kubernetes resurskvoter, för att begränsa resursförbrukning per container.
DevOps-ingenjörer behöver hantera containerisering med fokus på säkerhet, skalbarhet och motståndskraft. Containerisering har en brant inlärningskurva, och det är just den komplexiteten som förklarar varför endast ett fåtal projekt tillämpar tekniken i större utsträckning.
Slutsats
En DevOps-ingenjör är en unik och viktig medlem i ett agilt team. De är ofta få, men deras roll är avgörande för att projektet ska lyckas.
Förväntningarna på en DevOps-ingenjör är höga, då de förväntas ha flera roller samtidigt:
- De ska vara tekniskt kompetenta utvecklare.
- De ska vara lagspelare med empati och samarbetsvilja.
- De ska fungera som länk mellan utvecklingsteamet och icke-tekniska intressenter.
- De ska koppla ihop teamet med automatiserad kodtestning.
- De ska möjliggöra regelbundna releaser.
- De ska ständigt bygga ett nätverk av experter.
Trots den tekniska komplexiteten, är det de mänskliga aspekterna som spelar en avgörande roll för DevOps-initiativ. Om du är på väg att bli en DevOps-ingenjör, ha stolthet i ditt beslut och se till att din utbildning fokuserar på mer än bara teknisk kunskap.
Ta också en titt på vanliga frågor och svar vid DevOps-intervjuer.