Vanliga frågor och svar om DevOps vid anställningsintervjuer
DevOps har blivit ett alltmer populärt arbetssätt för att utveckla och lansera applikationer, vilket har skapat en högre efterfrågan på DevOps-specialister. Den här artikeln kommer att gå igenom några typiska frågor som ställs vid intervjuer för DevOps-roller, och ge dig bra svar. Om du använder dessa frågor som en grund för dina förberedelser ökar du chanserna att få jobbet. Är du rekryterare kan de underlätta anställningsprocessen.
Vad innebär DevOps för dig?
DevOps är ett förhållningssätt som syftar till att effektivisera arbetet genom hela mjukvaruutvecklingsprocessen. Det kan liknas vid en oändlig slinga, som innefattar planering, kodning, byggnation, testning, release, driftsättning, drift och övervakning.
DevOps har en inverkan på applikationens livscykel under planering, utveckling, leverans och drift. Varje fas är beroende av de andra, och faserna är inte begränsade till en specifik roll. I en äkta DevOps-kultur är alla roller delaktiga i varje fas på något sätt.
Varför är DevOps en viktig metod?
Team som anammar en DevOps-strategi tenderar att arbeta snabbare. Detta minskar risken för missförstånd och ger en snabbare process för att implementera förbättringar och andra förändringar. DevOps uppmuntrar till en ökad samverkan mellan utvecklings- och driftsteam, med mer samstämmiga målsättningar. Följande är några av fördelarna:
- Bättre kommunikation
- Ökat samarbete och sammanhållning
- Förbättrad samverkan
- Snabbare leverans av kvalitativa produkter
- Minskad komplexitet och snabbare problemlösning
- Ökad skalbarhet och flexibilitet för att införa ny kod
- Stabilare driftsmiljöer
- Ökad automatisering
- Minskade kostnader och bättre resursutnyttjande
- Ökad säkerhet genom integrerade och automatiserade verktyg
Vilka är de dagliga arbetsuppgifterna för en DevOps-specialist?
Några exempel på dagliga uppgifter:
- Säkerställa kontinuerlig integration och driftsättning.
- Delegera och kommunicera uppgifter som ska utföras.
- Skapa och beställa testprotokoll.
- Övervaka och samla in data om infrastruktur och applikationsmått.
- Analysera resultat från varje utvecklingsfas.
- Minska antalet fel och korta ner återställningstiden vid fel.
- Minska ledtiden för leveranser.
Hur underlättar DevOps för utvecklare?
Genom att använda en DevOps-metod slipper utvecklare vänta på återkoppling från driftsteamet för att fixa buggar i sin kod. Med kontinuerlig återkoppling kan de nu lösa problem mycket snabbare.
Vad innebär versionshantering?
Versionshantering är en metod för att spåra ändringar som görs i en fil eller en samling filer över tid, vilket gör det möjligt att återgå till specifika versioner senare. Ett verktyg för versionshantering underlättar spårningen av utvecklingsarbete och sparar olika versioner av källkoden för att kunna återgå till tidigare versioner vid behov. Git är ett av de mest använda verktygen i mjukvaruutveckling.
Vad är CI/CD och vilka fördelar ger det?
Kontinuerlig integration (CI)
CI kombinerar verktyg och processer som underlättar leveransen av högkvalitativ och snabb programvara. På så sätt undviks flaskhalsar och tekniska problem i lanseringsfaserna.
Kontinuerlig leverans (CD)
Denna metod automatiserar leveransen av kodförändringar och säkerställer att koden snabbt kan införlivas i produktionsmiljön, samt att applikationerna fungerar som de ska.
Kontinuerlig distribution (CD)
Till skillnad från kontinuerlig leverans syftar denna metod till att eliminera mänsklig inblandning vid distributionen av programvaran i produktionsmiljön. Publicering av ny eller ändrad kod till produktion är automatiserad.
CI/CD implementerar DevOps genom hela applikationens livscykel. Genom att effektivisera och automatisera de olika stegen förbättras produktiviteten i mjukvaruutvecklingsprocessen.
Vad är kontinuerlig övervakning?
Kontinuerlig övervakning är en DevOps-metod som innefattar övervakning, varningar och åtgärder för både kod och infrastruktur. Detta möjliggör snabb upptäckt och identifiering av problem som kan uppstå under implementeringen, vilket minskar tiden det tar att lösa dem.
Varför är kontinuerlig testning viktig?
Kontinuerlig testning innebär att automatisera tester tidigt, gradvis och på ett lämpligt sätt i utvecklingsprocessen. Det är viktigt eftersom det säkerställer kodens kvalitet. Fel upptäcks tidigt och återkopplingen på koden går snabbare.
Beskriv några typer av tester som används inom DevOps
Enhetstester
De testar en specifik kodbit isolerat. Enhetstester får inte vara kopplade till databasen, använda filsystemet, kommunicera med externa system eller interagera med systemkomponenter. Detta gör att de kan köras snabbt och ger snabb feedback om ändringar har stört befintlig funktionalitet.
Komponenttester
Dessa tester omfattar stora grupper av funktioner för att kunna identifiera problem. De är i allmänhet långsammare, kräver mer komplex konfigurering och mer I/O-anslutningar till en databas, filsystem eller andra system.
Implementeringstester
Dessa tester kontrollerar att distributionen har genomförts korrekt, d.v.s. att applikationen har installerats korrekt, konfigurerats, har tillgång till de tjänster som krävs och svarar som förväntat.
Förutom dessa typer finns det även exploaterings- och användbarhetstester. För mer information om testning, läs artikeln om typer av applikationstestning.
Vad innebär mikroservicearkitektur, och hur skiljer den sig från traditionell arkitektur?
Traditionellt sätt att utveckla programvara är med en monolitisk arkitektur. Det innebär att alla funktioner i en applikation är samlade i en enda enhet. Vid fel eller behov av uppdatering måste koden som styr hela produkten analyseras.
Detta kan orsaka driftstopp eller till och med krascher, vilket är en stor risk för kodens integritet. För kunder kan det innebära förluster och frustration.
I en mikroservicearkitektur representerar en applikations funktioner en separat utvecklad och integrerad tjänst. Komponenterna är oberoende, men arbetar tillsammans för att utföra de korrelerade uppgifterna.
På så sätt körs varje tjänst oberoende utan att störa de andra, även vid fel. Om en funktion går sönder är det möjligt att justera den utan att hela applikationens funktion äventyras.
Mikrotjänster gör DevOps ännu mer flexibelt och effektivt, accelererar utvecklingen och gör applikationer mer skalbara.
Vad innebär infrastruktur som kod (Infrastructure as Code)?
Infrastruktur som kod är en metod för att definiera dator- och nätverksinfrastruktur genom att använda tekniker för källkodshantering, och behandla den som vilket annat programvarusystem som helst.
Denna kod kan förvaras under källkontroll för att möjliggöra granskning och reproducerbar konstruktion. Den kan även utsättas för testpraxis och tillämpa disciplinen för kontinuerlig leverans.
Infrastruktur som kod baseras på följande metoder:
- Använda definitionsfiler
- Självdokumenterande system och processer
- Versionshantering av alla element
- Kontinuerlig testning av system och processer
- Små förändringar istället för stora satser
- Kontinuerlig tillgänglighet av tjänster
Verktyg för byggautomation anger hur programvaran ska byggas (stegen som ska utföras och i vilken ordning) och vilka beroenden som krävs (vilken annan programvara som måste finnas för att bygget ska lyckas).
Vissa verktyg, som Maven och Apache’s Ant, är bäst lämpade för projekt i specifika programmeringsspråk (t.ex. Java), men det finns andra, som Hudson och Jenkins, som kan användas mer allmänt med olika projekt.
Vad är en DevOps-pipeline?
En DevOps-pipeline är en process som omfattar flera steg innan ny programvara lanseras. Den kan användas i alla faser av projektet, från integration och testning till leverans och driftsättning. I allmänhet går den igenom följande steg och team:
- Produktvision: Definierar produktens egenskaper.
- Utvecklingsteam: Utvecklar iterativt och inkrementellt.
- Driftteam: Implementerar och underhåller stabila miljöer.
- Övervakning och återkoppling: Strävar efter att skapa värde och användarintresse hos kunden.
Vilka är de olika stegen i en CI/CD-pipeline?
En CI/CD-pipeline består av några få grupperade uppgifter som kallas pipeline-steg. I korthet är de:
- Kompilering: Steget där applikationen kompileras.
- Test: Steget där koden testas. Här sparar automatisering tid och ansträngning.
- Lansering: När applikationen skickas till förvaret.
- Distribution: Koden distribueras till produktionsmiljön.
- Validering och efterlevnad: Du kan använda verktyg för att verifiera bildsäkerhet, t.ex. Clair, för att säkerställa bildernas kvalitet genom att jämföra dem med kända sårbarheter (CVE).
Dessa är de vanligaste stegen i en DevOps-pipeline, men varje företag har sina specifika behov och pipeliner.
Vad innebär plattformsvirtualisering och vilka är fördelarna med det?
Plattformsvirtualisering innebär att simulera ett komplett datorsystem för att köra flera operativsystem samtidigt på en enda fysisk maskin.
I den här konfigurationen har en virtuell maskinövervakare (VMM), eller hypervisor, full kontroll över den fysiska maskinens hårdvaruresurser. Gästoperativsystem körs i virtuella maskiner som VMM hanterar. Miljövirtualisering innebär att simulera en eller flera virtuella maskiner samt nätverksanslutningarna mellan dem.
Virtualisering kan på flera sätt bidra till att minska tiden som läggs på driftsättning och de risker som är förknippade med det. Användningen av virtuella maskiner vid driftsättning är till stor hjälp för att uppnå effektiv konfigurationshantering vertikalt och horisontellt över systemen.
Användningen av virtualisering ger i synnerhet följande fördelar:
- Snabbt svar på ändrade behov
- Konsolidering
- Standardisering
- Enkelt underhåll av baslinjer
Vad är skillnaden mellan containrar och virtuella maskiner?
Både containrar och virtuella maskiner arbetar med virtualisering och isolering av miljöer för att främja bearbetning oberoende av applikationer. Containrar skapar isolerade miljöer där olika applikationer kan köras samtidigt eftersom uppdelningen görs på nivån av tillgängliga resurser, t.ex. minne och bearbetning. Virtuella maskiner gör det å andra sidan möjligt för en fysisk maskin att hantera flera olika operativsystem, hårddiskar och hårdvaruoberoende från de ursprungliga.
Vad är den största skillnaden mellan Docker och Kubernetes?
Docker är ett av de mest använda verktygen för containrar inom DevOps. Det fokuserar på portabilitet för applikationer genom att placera dem i tekniska containrar och paketsystem, och möjliggör förflyttning över olika plattformar.
Kubernetes är ett verktyg för orkestrering av containrar som kan gruppera containrar efter logiska kategorier. Det kan distribueras på flera datorer genom automatiserad distribution.
Läs mer om Kubernetes vs. Docker.
Vilka typer av telemetrimått finns det inom DevOps?
- Affärsnivå: Exempel är antalet försäljningstransaktioner, intäkter från försäljningstransaktioner, användarregistreringar, kundbortfall och A/B-testresultat.
- Applikationsnivå: Exempel är transaktionstider, användarsvarstider och applikationsfel.
- Infrastrukturnivå: Exempel är webbservertrafik, CPU-belastning och diskanvändning.
- Klientprogramnivå: Exempel är programfel, krascher och användaruppmätta transaktionstider.
- Implementeringspipelinenivå: Exempel är byggpipelinestatus (röd eller grön för olika automatiserade testsviter), ändrade deadlines för distribution, distributionsfrekvenser, testmiljökampanjer och miljöstatus.
Vilka tekniker använder du för att jobba med DevOps?
Den här frågan syftar till att ta reda på vilka tekniker du använder för att implementera DevOps-kulturen i en organisation. Några av de vanligaste teknikerna som en DevOps-specialist kan använda är:
- Kontinuerlig utveckling: Git, SVN, Mercurial, CVS, Jira
- Kontinuerlig integration: Jenkins, Bamboo, Hudson
- Kontinuerlig utveckling: Nexus, Archive, Tomcat
- Kontinuerlig distribution: Puppet, Chef, Docker
- Kontinuerlig övervakning: Splunk, ELK Stack, Continuous Nagios
- Testning: Selenium, Katalon Studio
Berätta om dina erfarenheter av att leda DevOps-projekt
DevOps-kompetens handlar inte bara om tekniska kunskaper, utan också om ledarskapsförmåga, vilket ofta återfinns hos chefer, programledare och projektledare.
Det är viktigt att veta hur man hanterar och stöttar förändringar, hur man underlättar överföringen av nya kodversioner till driftsidan, hur man utvärderar och övervakar olika plattformar och verktyg för att mäta prestanda, samt hur man analyserar och delar resultat för att förbättra framtida leveranser, etc.
Närma dig denna fråga metodiskt och beskriv din resa mot att lösa komplexa problem. Hur tänker du förbättra infrastrukturens funktion? Hur planerar du att samarbeta med front-, middle- och backoffice-utvecklare? Vilka övervakningsverktyg behärskar du? Du kan även dela med dig av dina erfarenheter av konflikthantering i teamet.
Om du vill veta mer kan du fundera på att anmäla dig till någon av dessa DevOps-kurser.