DevOps har blitt en stadig mer utbredt metode for utvikling og distribusjon av applikasjoner, noe som igjen har ført til et økende behov for fagfolk innen DevOps.
Denne artikkelen vil presentere noen av de mest stilte spørsmålene i DevOps-intervjuer, samt forslag til svar. Ved å bruke disse spørsmålene som utgangspunkt for studier, kan du øke dine sjanser for å bli ansatt. Hvis du er rekrutterer, kan de være et nyttig verktøy i ansettelsesprosessen.
Ofte stilte DevOps-intervjuspørsmål og svar
Hva betyr DevOps for deg?
DevOps er en strategi som har som mål å forbedre effektiviteten gjennom hele programvareutviklingssyklusen. DevOps-prosessen kan beskrives som en kontinuerlig sløyfe, som omfatter fasene planlegging, koding, bygging, testing, lansering, distribusjon, drift og overvåkning.
DevOps påvirker applikasjonens livssyklus i planleggings-, utviklings-, leverings- og driftsfasene. Hver fase er avhengig av de andre, og fasene er ikke begrenset til en spesifikk rolle. I en velfungerende DevOps-kultur er alle roller involvert i alle faser, i større eller mindre grad.
Hvorfor er DevOps viktig?
Team som benytter en DevOps-tilnærming, har en tendens til å fullføre prosjektene sine raskere. Dette reduserer kommunikasjonsproblemer, noe som forenkler implementeringen av forbedringer og nødvendige endringer. DevOps fremmer økt samarbeid mellom utviklings- og driftsteamene, der alle har felles mål. Oppsummert kan fordelene være:
- Forbedret kommunikasjon
- Økt samhold og teamarbeid
- Bedre samarbeid
- Raskere levering av kvalitetsprodukter
- Redusert kompleksitet og raskere problemløsning
- Større skalerbarhet og fleksibilitet for ny kode
- Mer stabile driftsmiljøer
- Økt automatisering
- Reduserte kostnader og bedre ressursutnyttelse
- Forbedret sikkerhet gjennom integrerte og automatiserte verktøy
Hvilke daglige oppgaver har en DevOps-medarbeider?
Noen eksempler på daglige oppgaver kan være:
- Sikre kontinuerlig integrasjon og distribusjon
- Tildele og formidle oppgaver
- Utforme og organisere testprotokoller
- Overvåke og samle inn data om infrastruktur og applikasjoner
- Analysere resultater fra hvert utviklingssteg
- Redusere feilhyppighet og gjenopprettingstid
- Korte ned leveringstiden
Hvordan gagner DevOps utviklere?
Med en DevOps-metodikk slipper utviklere å vente på tilbakemelding fra driftsteamet for å rette feil i koden sin. De kan nå løse problemer raskere, takket være kontinuerlig tilbakemelding på koden.
Hva er versjonskontroll?
Versjonskontroll er en praksis som gjør det mulig å holde oversikt over endringer i en fil eller en gruppe filer over tid. Dette gjør det enkelt å hente frem spesifikke versjoner senere. Et versjonskontrollverktøy gjør det enkelt å spore utviklingsarbeidet og lagre ulike versjoner av kildekoden, slik at du kan gå tilbake til en tidligere versjon ved behov. Git er et av de mest brukte verktøyene i denne fasen av programvareutvikling.
Hva er CI/CD, og hvilke fordeler gir det?
Kontinuerlig integrasjon (CI)
CI kombinerer verktøy og praksiser for å gjøre det lettere å levere programvare av høy kvalitet raskt. Dette eliminerer flaskehalser og forebygger tekniske problemer i lanseringsfasen.
Kontinuerlig levering (CD)
CD automatiserer levering av kodeendringer, noe som sikrer at koden raskt kan implementeres i produksjon og at applikasjonene fungerer som de skal.
Kontinuerlig distribusjon (CD)
I motsetning til kontinuerlig levering, er målet med kontinuerlig distribusjon å eliminere menneskelig inngripen ved distribusjon av programvare. Publisering av ny eller endret kode til produksjon er automatisert.
CI/CD implementerer DevOps i hele applikasjonens livssyklus. Disse praksisene bidrar til å forbedre produktiviteten i alle faser av programvareutviklingsprosessen ved å effektivisere og automatisere dem.
Hva er kontinuerlig overvåking?
Kontinuerlig overvåking er en DevOps-praksis som innebærer overvåking, varsling og handling på både kode og infrastruktur. Dette gjør at problemer som oppstår under implementeringen, blir raskt oppdaget og identifisert, noe som reduserer tiden det tar å løse dem.
Hvorfor er kontinuerlig testing viktig?
Kontinuerlig testing innebærer å automatisere tester tidlig, gradvis og hensiktsmessig i utviklingsprosessen. Det er viktig fordi det sikrer kvaliteten på koden. Feil oppdages tidlig, og tilbakemeldinger på koden skjer raskere.
Forklar ulike typer tester som brukes i DevOps
Enhetstester
Disse testene sjekker en spesifikk del av koden isolert. Enhetstester skal ikke være koblet til databasen, bruke filsystemet, kommunisere med eksterne systemer eller samhandle med systemkomponenter. Dette gjør at de kjører raskt, og du får raskt tilbakemelding hvis endringer har ødelagt eksisterende funksjonalitet.
Komponenttester
Disse testene sjekker større grupper av funksjoner for å identifisere problemer. De er generelt tregere, krever mer kompleks konfigurasjon og mer I/O-tilkobling til en database, et filsystem eller andre systemer.
Implementeringstester
Disse testene bekrefter at distribusjonen fungerte, det vil si at applikasjonen er korrekt installert, konfigurert, har tilgang til alle nødvendige tjenester og responderer.
I tillegg finnes det også ytelses- og brukertester. For å lære mer om testing, se artikkelen om ulike typer applikasjonstesting.
Hva er mikrotjenestearkitektur, og hvordan skiller den seg fra tradisjonell arkitektur?
Den tradisjonelle metoden for programvareutvikling er monolittisk. Dette innebærer at alle funksjoner i en applikasjon er samlet i en enkelt blokk. Ved feil eller behov for oppdatering analyseres koden for hele produktet.
Dette kan føre til stopp eller krasj, og utgjør en stor risiko for koden. For kundene betyr det tap og problemer.
I en mikrotjenestearkitektur representerer funksjonene til en applikasjon en uavhengig utviklet og integrert tjeneste. Komponentene er separate, men fungerer sammen for å utføre de relevante oppgavene.
På denne måten kjører hver tjeneste uavhengig av de andre, noe som også gjelder ved feil. Hvis en funksjon feiler, kan den justeres uten at det går ut over funksjonaliteten til hele applikasjonen.
Mikrotjenester gjør DevOps mer fleksibelt og effektivt, noe som gir raskere utvikling og gjør applikasjoner mer skalerbare.
Hva er Infrastruktur som kode?
Infrastruktur som kode er en tilnærming der databehandlings- og nettverksinfrastruktur defineres ved hjelp av kode. Denne koden behandles på samme måte som andre programvaresystemer, med bruk av kildekodehåndteringsteknikker.
Koden kan lagres i et versjonskontrollsystem for sporbarhet og gjentakbarhet, og kan testes og implementeres ved hjelp av kontinuerlig levering.
Infrastruktur som kode er basert på følgende praksiser:
- Bruk av definisjonsfiler
- Selvdokumenterende systemer og prosesser
- Versjonskontroll av alle elementer
- Kontinuerlig testing av systemer og prosesser
- Små endringer i stedet for store batcher
- Kontinuerlig tilgjengelighet av tjenester
Verktøy for byggautomatisering spesifiserer hvordan programvaren skal bygges (hvilke trinn som skal utføres og i hvilken rekkefølge) og hvilke avhengigheter som kreves (hvilken annen programvare må være installert for at byggingen skal lykkes).
Noen verktøy er bedre egnet for prosjekter i spesifikke programmeringsspråk. For eksempel er Maven og Apache’s Ant mest brukt i Java-prosjekter, men de kan også brukes med andre språk. Andre verktøy, som Hudson og Jenkins, kan brukes mer utbredt i ulike prosjekter.
Hva er en DevOps-pipeline?
En DevOps-pipeline er en prosess som omfatter flere trinn før lansering av ny programvare. Den kan brukes i alle faser av et prosjekt, fra integrasjon og testing til levering og distribusjon. Vanligvis går den gjennom følgende stadier og lag:
- Produktvisjon: Definerer egenskapene til produktet
- Utviklingsteam: Utvikler iterativt og trinnvis
- Driftsområde: Implementerer og vedlikeholder stabile miljøer
- Overvåking og tilbakemelding: Sikrer kundeverdi og nytte
Hvilke stadier finnes i en CI/CD-pipeline?
En CI/CD-pipeline består av ulike trinn, som er grupperte oppgaver kalt pipeline-stadier. De viktigste stadiene er:
- Kompilering: Her kompileres applikasjonen
- Test: Her testes koden. Automatisering sparer tid og krefter her
- Lansering: Applikasjonen sendes til depotet
- Distribusjon: Koden distribueres til produksjonsmiljøet
- Validering og samsvar: Du kan bruke verktøy for å verifisere sikkerheten til bildene dine, som Clair, og sammenligne dem med kjente sårbarheter (CVE)
Dette er de vanligste stadiene i en DevOps-pipeline, men hvert selskap har sine spesifikke behov og tilpassede pipelines.
Hva betyr plattformvirtualisering, og hva er fordelene?
Plattformvirtualisering innebærer å simulere et helt datasystem for å kjøre flere instanser av operativsystemer samtidig på en enkelt fysisk maskin.
I denne konfigurasjonen har en virtuell maskinmonitor (VMM), eller hypervisor, full kontroll over den fysiske maskinens maskinvareressurser. Gjesteoperativsystemer kjører i virtuelle maskiner, som VMM administrerer. Miljøvirtualisering innebærer å simulere en eller flere virtuelle maskiner og nettverksforbindelsene mellom dem.
Virtualisering kan redusere tiden brukt på distribusjon, og risikoen forbundet med det, på flere måter. Bruken av virtuelle maskiner er til stor hjelp for effektiv konfigurasjonsadministrasjon vertikalt og horisontalt på tvers av systemene dine.
Spesielt gir bruken av virtualisering følgende fordeler:
- Rask respons på endrede krav
- Konsolidering
- Standardisering
- Enkelt vedlikehold av grunnlinjer
Hva er forskjellen mellom containere og virtuelle maskiner?
Både containere og virtuelle maskiner arbeider med virtualisering og isolering av miljøer for å muliggjøre uavhengig behandling av applikasjoner. Containere oppretter isolerte miljøer der ulike applikasjoner kan kjøre samtidig, fordi oppdelingen skjer på nivå med tilgjengelige ressurser som minne og prosessering. En virtuell maskin lar derimot en fysisk maskin huse andre virtuelle maskiner med forskjellige operativsystemer, harddisker og maskinvare uavhengig av det originale systemet.
Hva er hovedforskjellen mellom Docker og Kubernetes?
Docker er et av de mest brukte verktøyene for containerhåndtering innen DevOps. Det fokuserer på portabiliteten til applikasjoner, og plasserer dem i teknologiske beholdere og emballasjesystemer som kan flyttes mellom ulike plattformer.
Kubernetes er derimot et orkestreringsverktøy for containere, som kan gruppere dem etter logiske kategorier. Det kan distribueres til flere datamaskiner gjennom automatisert distribusjon.
Les mer om Kubernetes vs. Docker.
Hvilke telemetri-målinger er vanlige i DevOps?
- Forretningsnivå: Eksempler inkluderer antall salgstransaksjoner, inntekter fra salgstransaksjoner, brukerregistreringer, churn rate og resultater fra A/B-testing.
- Applikasjonsnivå: Eksempler inkluderer transaksjonstider, brukerresponstider og applikasjonsfeil.
- Infrastrukturnivå: Eksempler inkluderer webservertrafikk, CPU-belastning og diskbruk.
- Klientprogramvarenivå: Eksempler inkluderer applikasjonsfeil, krasj og brukermålte transaksjonstider.
- Distribusjonspipeline-nivå: Eksempler inkluderer status for byggepipeliner (rød eller grønn for ulike automatiserte testsuiter), endringer i distribusjonsfrister, distribusjonsfrekvens, kampanjer for testmiljøer og miljøstatus.
Hvilke teknologier bruker du for å jobbe med DevOps?
Dette spørsmålet er ment å kartlegge hvilke teknologier du kan bruke for å implementere DevOps-kulturen i en organisasjon. Noen vanlige teknologier en DevOps-medarbeider kan bruke er:
- Kontinuerlig utvikling: Git, SVN, Mercurial, CVS, Jira
- Kontinuerlig integrasjon: Jenkins, Bamboo, Hudson
- Kontinuerlig utvikling: Nexus, Archive, Tomcat
- Kontinuerlig distribusjon: Puppet, Chef, Docker
- Kontinuerlig overvåking: Splunk, ELK Stack, Continuous Nagios
- Testing: Selenium, Katalon Studio
Fortell oss om din erfaring med å administrere DevOps-prosjekter
DevOps-ferdigheter handler ikke bare om teknisk kunnskap, men også om menneskelige og ledelsesmessige ferdigheter som ofte finnes blant ledere, programdirektører og prosjektledere.
Det er viktig å vite hvordan man håndterer og støtter endringer, muliggjør overføring av nye kodeversjoner til driftsavdelingen, evaluerer og overvåker ulike plattformer og verktøy for å måle ytelse, og analyserer og deler resultater for å forbedre fremtidige leveranser.
Tilnærm deg dette spørsmålet med en metodisk tilnærming, og forklar hvordan du har løst komplekse problemer. Hvordan har du tenkt å forbedre funksjonen til infrastrukturen? Hvordan planlegger du å samarbeide med utviklere på front-, mellom- og backend? Hvilke overvåkingsverktøy behersker du? Vurder også å dele erfaringene dine med konfliktløsning i teamet.
For å lære mer kan du vurdere å melde deg på et av disse DevOps-kursene.