Innføring i DevOps: En moderne tilnærming til programvareutvikling
DevOps har raskt blitt et sentralt konsept innen programvareutvikling. Det fremmer et samarbeidende miljø der utvikling og drift arbeider sammen for å skape programvare av høy kvalitet på en effektiv måte.
Denne tilnærmingen fører til økt kundetilfredshet og gir bedrifter et konkurransefortrinn.
En global undersøkelse fra GitLab viser at 60% av utviklere lanserer kode dobbelt så raskt etter å ha tatt i bruk DevOps. I tillegg rapporterte 56% av respondentene at de har implementert automatisering helt eller delvis. Kilde: GitLab undersøkelse
DevOps fortsetter å utvikle seg og setter standarder globalt.
Men hvordan fungerer DevOps egentlig, og hvorfor er det så attraktivt og nyttig innen programvareutvikling?
Denne artikkelen vil utforske DevOps-livssyklusen i detalj, slik at du får en dypere forståelse av de ulike fasene og verktøyene som brukes.
La oss begynne!
Hva er DevOps?
DevOps er en moderne filosofi som kombinerer programvareutvikling og IT-drift. Den benytter seg av praksiser, personell, verktøy og teknologi for å effektivisere prosessene.
Begrepet «DevOps» er en sammensetning av to ord:
Dev = Programvareutvikling
Ops = IT-drift
DevOps-metodikken har som mål å forkorte utviklingssyklusen samtidig som den sikrer kontinuerlig levering av høykvalitets programvare. Ved å adoptere DevOps, kan man forbedre produktkvaliteten, fremskynde distribusjonen og forenkle feilretting basert på tilbakemeldinger.
Dette fører til fornøyde kunder, økt konkurranseevne og større forretningsmessig suksess.
En viktig del av DevOps er bruken av diverse verktøy i alle utviklingsfasene, fra planlegging og utvikling til testing, overvåking, konfigurering, utgivelse og vedlikehold. Disse verktøyene automatiserer prosesser og sparer tid, ressurser og krefter.
Konseptet «DevOps» ble introdusert i 2009 av Patrick Debois, en belgisk konsulent og prosjektleder. Han var en av de første som frontet DevOps-bevegelsen, en tankegang som oppsto fra bidrag fra eksperter innen ulike IT-områder, og hovedsakelig utviklet seg fra:
- Enterprise Systems Management (ESM)
- Agil utvikling
I DevOps representerer «Dev» ikke bare utviklerne, men hele teamet som er involvert i utviklingen av en programvareløsning. Dette omfatter planlegging, testing, kvalitetssikring (QA), og lignende. «Ops» refererer til alle i driftsteamet, inkludert systemadministratorer, systemingeniører, sikkerhetseksperter, databaseadministratorer, driftspersonell, og utgivelsesingeniører.
Hvorfor velge DevOps?
Tradisjonelle metoder for programvareutvikling innebar manuelle prosesser som ofte var tidkrevende, ineffektive og skapte friksjon mellom utviklings- og driftsteam.
Selv om det kan oppstå uenigheter mellom utviklings- og driftsteam, er begge enige om at kundetilfredshet er det endelige målet. Kunder har stadig skiftende behov, de forventer nye funksjoner og tjenester som gjør livet enklere og brukeropplevelsen bedre.
Dette skaper et dilemma for bedrifter: skal de raskt implementere endringer med risiko for ustabilitet, eller opprettholde en stabil, men utdatert løsning? Ingen av disse alternativene er ideelle for å møte kundenes behov.
Utviklere vil gjerne fremskynde programvareutviklingen, mens driftsteamet vil være tilbakeholdne med å implementere endringer uten grundige sikkerhetstiltak.
DevOps tilbyr en løsning som forener disse to synspunktene. Det samler alle som er involvert i utvikling og drift og legger til rette for:
- Automatisering av repeterende manuelle oppgaver for å spare tid.
- Samarbeid om problemløsning og deling av data for forbedring.
- Nøye overvåkning av alle aktiviteter.
- Prioritering av oppgaver.
La oss se nærmere på fordelene ved å ta i bruk DevOps:
Fremskynder programvareutvikling
DevOps gjør det mulig for team å produsere programvare raskt og med høy kvalitet. Automatiseringsverktøy brukes i alle prosesser, fra planlegging og utvikling til testing, distribusjon og overvåking. Mikrotjenester muliggjør raske oppdateringer.
Pålitelighet og sikkerhet
Med DevOps kan du gjøre endringer i infrastrukturen og utføre oppdateringer jevnt, uten at det går ut over programvarens kjerne. Overvåkingsverktøy gir sanntidsinnsikt i programvarens funksjon og lar deg teste sikkerhet og ytelse.
Raskere programvaredistribusjon
DevOps bidrar til en raskere utviklings-, test- og forbedringsprosess av applikasjoner. Tidlig distribusjon muliggjør raskere tilbakemeldinger, som resulterer i en konkurransefordel.
Skalerbarhet
DevOps forenkler administrasjon av utviklingsprosesser og programvareinfrastruktur i stor skala. Det gir mulighet for å håndtere komplekse systemer og endringer på en effektiv og sikker måte.
Effektivt samarbeid
DevOps eliminerer barrierer mellom utviklings- og driftsteam ved å tydeliggjøre prioriteringer og ansvar. Det fremmer ansvarlighet og eierskap, og det åpner for bedre deling av data og samarbeid om problemløsning og forbedringer.
Kundetilfredshet
Ved å levere programvare som løser kundenes problemer, øker du tilfredsheten. Med DevOps kan du raskt respondere på tilbakemeldinger og levere programvare som møter kundenes behov.
Hva er DevOps livssyklus?
DevOps-livssyklusen består av ulike automatiske prosesser i en gjentagende flyt. Hver fase er kontinuerlig og representerer et uendelig kretsløp av samarbeid og iterasjon gjennom hele programvareutviklingen.
I et DevOps-økosystem jobber utviklings- og driftsteamene sammen gjennom hele livssyklusen, og tilegner seg omfattende ferdigheter. De bruker verktøy og teknologi for å automatisere manuelle prosesser i hver fase.
De forskjellige fasene i en DevOps-livssyklus er:
1. Kontinuerlig utvikling
Kontinuerlig utvikling er den første fasen i DevOps-livssyklusen, og den omfatter planlegging og koding.
I denne fasen setter DevOps-teamet seg inn i prosjektets visjon og krav og utarbeider en programvareplan basert på det. De samler innspill og diskuterer med interessenter, og deler opp oppgaver i mindre deler for en kontinuerlig utviklingsprosess.
Utviklerne skriver kode fortløpende, og endrer den ved behov. Dette gjør det mulig å identifisere feil tidlig i prosessen, før de blir for kompliserte.
Etter å ha valgt passende programmeringsspråk, starter utviklerne arbeidet med kildekoden. De vedlikeholder koden og sørger for versjonskontroll.
Verktøy for kontinuerlig utvikling:
- For kildekodebehandling kan man bruke Git, GitLab, Mercurial og BitBucket.
- For å pakke koden inn i kjørbare filer kan man bruke Maven, Garden, Gradle etc.
- For planlegging og samarbeid kan man bruke Jira, Trello, og lignende.
2. Kontinuerlig integrasjon (CI)
Kontinuerlig integrasjon (CI) er en sentral fase i DevOps-livssyklusen. Kildekoden endres jevnlig, enten daglig eller ukentlig, og kodeintegrasjon går ut på å bygge ny kode for å støtte nye funksjoner og integrere den med eksisterende kode.
Det er viktig å oppdage feil i koden tidlig i prosessen ved hjelp av enhetstesting, integrasjonstesting og lignende. Testing på dette tidspunktet bidrar til å evaluere hvordan oppdatert kode påvirker brukeropplevelsen. Eventuelle problemer må rettes opp og forbedres med flere funksjoner. Denne fasen inkluderer også kodegjennomgang, kodepakking og kompilering.
Verktøy for CI: For kontinuerlig integrasjon kan man bruke Jenkins, TeamCity, GitLab CI og CircleCI.
3. Kontinuerlig testing
DevOps krever testing i flere faser av livssyklusen for å sikre at koden er feilfri. Dette er en del av den uendelige sløyfen som muliggjør kontinuerlig forbedring av programvareløsningen.
Testing gjennomføres for å sjekke for feil og andre problemer som kan påvirke funksjonalitet, ytelse, stabilitet, sikkerhet og effektivitet, og sikrer at programvaren er av høy kvalitet og gir en god brukeropplevelse.
Det finnes to typer testing:
- Funksjonell testing: Kontrollerer funksjonaliteten til programvaren for å sikre at alt fungerer som det skal. Dette kan være enhetstesting, integrasjonstesting, systemtesting, grensesnitttesting, regresjonstesting og lignende.
- Ikke-funksjonell testing: Vurderer ikke-funksjonelle aspekter ved programvaren, som ytelse, sikkerhet, pålitelighet, og brukervennlighet. Dette kan inkludere ytelsestesting, stresstesting, belastningstesting, sikkerhetstesting, og kompatibilitetstesting.
Verktøy for testing: Det finnes mange verktøy for programvaretesting. Automatisering sparer tid og ressurser. Populære testverktøy er Apache JMeter, Selenium, IBM Rational Performance Tester, Junit, WebLOAD, SoapUI, Acunetix og Wapiti.
4. Kontinuerlig distribusjon (CD)
Etter testing må eventuelle problemer fikses umiddelbart. Deretter testes programvaren på nytt for å sikre at den er feilfri. Når programvaren er klar, distribueres den til produksjonsserverne. Kontinuerlig distribusjon (CD) er sentralt i DevOps-livssyklusen. Denne fasen inkluderer konfigurasjonsadministrasjon for å sikre jevn og presis kodedistribusjon.
Utviklingsteamet kan implementere koden på serverne og planlegge oppdateringer og vedlikehold, mens konfigurasjonen holdes konsistent gjennom hele produktets livssyklus.
For distribusjon kan man bruke metoder som containerisering for å pakke koden med alle dens avhengigheter og komponenter. Dette gjør det mulig å kjøre koden i et isolert miljø, noe som reduserer risikoen. Containeriseringsverktøy sikrer konsistens gjennom hele utviklings-, test- og distribusjonsprosessen.
Verktøy for CD: Man kan bruke Ansible, Puppet, Vagrant, GoCD og Chef for kontinuerlig utrulling, og Docker for containerisering.
5. Kontinuerlig tilbakemelding
Kontinuerlig innsamling og behandling av tilbakemeldinger er en viktig del av DevOps. Dette gir en forståelse av kundeopplevelsen etter at produktet er lansert, og åpner for forbedringer.
For å samle tilbakemeldinger må utvikling-, test-, distribusjons-, support-, QA-, og markedsføringsteam jobbe tett sammen. Kundeatferd analyseres for å forbedre programvaren med hensyn til ytelse, funksjonalitet, sikkerhet, brukervennlighet, pålitelighet og estetikk.
DevOps-team kan samle tilbakemeldinger fra kunder på flere måter:
- Via sosiale mediekanaler som LinkedIn, Facebook og Instagram.
- Ved hjelp av undersøkelser.
Verktøy for tilbakemelding: Jira Service Management, Pendo, Slack og GetFeedback.
6. Kontinuerlig overvåking
Implementeringsfasen er ikke slutten på DevOps-livssyklusen. Det er en kontinuerlig prosess der hver fase gjentas for å forbedre programvaren.
Kontinuerlig overvåking gir sanntidsinnsikt i programvarens ytelse, funksjonalitet og tilstand. Etter distribusjon er det viktig å overvåke programvaren for systemfeil, konfigurasjonsproblemer, minneproblemer, sikkerhetsrisiko og lignende.
DevOps-teamet må regelmessig overvåke data som logger, hendelser, metadata og varsler, for å identifisere problemer raskt og forbedre applikasjonens kvalitet. Driftsteamet overvåker programvarestatus og brukeraktivitet, ser etter uvanlig systemoppførsel, sporer feil og lignende. Hvis problemer eller avvik oppdages, informeres teamet, slik at de kan samarbeide om å løse problemet.
Verktøy for overvåking: Verktøy for å automatisere overvåkningen bidrar til å spare tid og raskt identifisere problemer. Man kan bruke verktøy som New Relic, Nagios, Splunk, ELK Stack, Datadog, Prometheus og Grafana.
7. Kontinuerlig drift
I likhet med overvåking må ulike operasjoner utføres for å sikre at programvaren fungerer bra, oppdateres jevnlig med forbedringer og at den gir en god brukeropplevelse.
Hovedmålet med kontinuerlig drift er å automatisere prosessen med å utgi programvaren, inkludert oppdateringer. Programvaren krever vedlikehold over tid for å oppfylle kundenes krav, forbedre funksjonalitet og eliminere problemer.
Vedlikehold fører ofte til at utviklere setter serveren offline, noe som kan føre til nedetid. Selv kort nedetid kan føre til kostnader og påvirke brukeropplevelsen.
For å unngå dette, automatiseres kontinuerlig drift ved hjelp av verktøy og systemer for å redusere eller eliminere nedetid. Dette forenkler prosessen med å utvikle, teste og utgi programvare i ulike miljøer. Ved å tilby konstant oppetid, leverer man en uavbrutt tjeneste til kundene.
Verktøy for kontinuerlig drift: Containerorkestreringssystemer som Kubernetes og Docker Swarm kan brukes for kontinuerlig drift.
Hvordan ta i bruk DevOps? De 4 E-ene
Å ta i bruk DevOps handler ikke bare om å kjøpe et verktøy. Det er en teknikk, metodikk og filosofi som må implementeres for å få mest mulig ut av det.
Her er en fremgangsmåte for å ta i bruk DevOps:
1. Omfavn DevOps-kulturen
Det er viktig å forstå DevOps-metodikken og dens verdi. DevOps-kulturen er avgjørende for implementeringen, og bygger på:
- Veksttankegang: DevOps fokuserer på vekst for teamet og for hvert enkelt medlem. Det oppfordrer til kontinuerlig læring, tilbakemeldinger, forbedringer og samarbeid.
- Kortere utgivelsessyklus: DevOps har som mål å fremskynde utgivelsessyklusen med fokus på kvalitet. Dette resulterer i enklere planlegging, risikohåndtering, og tilpasning til endringer.
- Samarbeid: DevOps samler forskjellige team som jobber mot et felles mål. Dette øker samarbeid, tillit og åpenhet, samtidig som det er i tråd med forretningsmålene.
- Ansvarlighet: Hvert medlem er ansvarlig for sine oppgaver og levering av prosjekter til avtalt tid og med høy kvalitet.
2. Evaluer dine krav
Hvert team og bedrift har unike krav, og DevOps-implementeringen må tilpasses. Definer dine unike behov og mål med programvareutviklingen, planlegg DevOps-fasene og velg de rette verktøyene.
3. Legg vekt på beregninger
Det er viktig å spore fremdrift etter at man har implementert DevOps, og bruke relevante beregninger:
- Gjennomsnittlig lastetid for programvaren
- Gjennomsnittlig tid til produksjon (MTTP)
- Gjennomsnittlig tid til gjenoppretting (MTTR)
- Distribusjonsfrekvens og hastighet
Det er viktig å ikke overdrive det med beregningene, men å velge et fåtall som er relevante for å sette mål for teamet. Resultater bør deles for å holde teamet oppdatert.
4. Bruk DevOps beste praksis
DevOps kan implementeres jevnt ved å følge noen beste praksiser:
- Agil prosjektledelse: Fokus på samarbeid, tilbakemeldinger fra brukere, korte utviklingssykluser og rask tilpasning.
- Automatisering og DevOps-verktøykjede: Automatisering er sentralt i DevOps. Verktøy for hver fase, fra utvikling til drift, bidrar til en raskere utvikling og utgivelse.
- Mikrotjenester: Programvaren bygges som et sett med små tjenester som kjører sine egne prosesser og samhandler via API-er. Dette gir mulighet for kontinuerlig integrasjon og levering.
- Infrastruktur som kode (IaC): Infrastrukturen administreres via kode for økt kontroll og pålitelighet.
- Sikkerhetspraksis: IT-sikkerhet er viktig for å redusere risiko. Dette gjøres via DevSecOps for å automatisere sikkerhetsaktiviteter.
Et integrert utviklingsmiljø (IDE) som Visual Studio eller PyCharm kan brukes sammen med containerisering. Verktøy for DevSecOps kan være SonarQube, Accunetix og Checkmarx.
Konklusjon
DevOps er en moderne tilnærming til programvareutvikling som hjelper organisasjoner med å skape høykvalitetsprodukter raskt. Det omfatter praksiser, prinsipper og verktøy som fører til vellykket programvareutvikling, fornøyde kunder og et konkurransefortrinn.
Ved å ta i bruk DevOps og de rette verktøyene, kan du automatisere oppgaver, spare tid, penger og ressurser.