Continuous Integration / Continuous Delivery

Continuous Integration / Continuous Delivery (forkortes ofte CI / CD) er et sæt "spilleregler" og retningslinjer for, hvordan et hold leverer en høj frekvens af "releases" i en høj kvalitet. Korrekt udført CI / CD kan give store fordele for stort set alle webprojekter.

Langt de fleste, måske alle, softwareløsninger har brug for kontinuerlige forbedringer. Der er altid noget der kan forbedres, skal forbedres eller fejl der skal rettes. Tidligere havde man en tendens til at samle rigtig mange opgaver og forbedringer i meget store såkaldte "releases". I store releases kan man potentielt have pillet ved rigtig mange ting, og derfor indgår der også store og tidskrævende test-scenarier før lancering. Dertil kommer selvfølgelig hele planlægningen og prioriteringen. Alt i alt: Store releases resulterer i stor ventetid og lav agilitet.

Hvad med små, men hyppige releases?

Der er efterhånden bred enighed om, at hyppige mindre releases er vejen frem, og det er vi helt enige i her hos LAIT. Nye features kan blive udviklet og rullet ud i en fart, prioritering kan ændres undervejs, og fejlrettelser kan håndteres parallelt med planlagt udvikling. Hyppige releases er "Continuous Delivery".

Men for at kunne levere CD, så er der en række ting som skal være på plads. Det er dels teknik og platform, men også kultur og arbejdsgang.

Continuous Integration er en forudsætning for Continuous Delivery

Continuous Integration (CI) er en disciplin for udviklerne. Versionering af kildekoden er en nødvendighed på et hold, og kildekoden og de enkelte versioner heraf, er struktureret i såkaldte "branches". Grundstenen i CI er, at udviklerne, så ofte som muligt, skal flette deres ændringer i kildekoden tilbage i det vi kalder "main branch". Automatiserede tests er den vigtige nøglesætning her. Som en del af udviklingen udvikles og vedligeholdes en række automatiserede tests, og kun kildekode der består disse tests, kan flettes ind i "main branch". På denne måde sikrer man, at udviklerne løbende leverer deres bidrag til applikationen, og hurtigere og nemmere kan håndtere evt. introducerede fejl. Dels fordi opgaven er overskuelig ("små mindre bidder"), og dels fordi den er "top of mind". Man skal ikke vente på den store "release-dag" om måske uger eller måneder, for så derefter at konstatere fejl og problemer.

Der findes en lang række værktøjer og metodikker til at støtte op om et udviklerhold, som skal levere CI. Hos LAIT bruger vi altid teknologien Git til vores kildekodeversionering, mens metodikken GitFlow sikrer en struktureret håndtering af "branches", "releases" og "hotfixes".

Herunder ses et glimrende diagram der viser hvordan GitFlow holder styr på tingene (diagram lånt fra Chuka Ofili's blog)

GitFlow diagram

Continuous Delivery og Continuous Deployment

Konceptet Continuous Delivery kan tages et skridt videre til Continuous Deployment. Continuous Deployment betyder at alle de små feature-releases eller bug-fixes fra Continuous Delivery, automatisk bliver bygget, testet OG releaset til produktionsmiljøet (såfremt build, test og fletning af kildekode altsammen går godt).

For at lykkes med Continous Deployment, har man sædvanligvis brug for en såkaldt "build-server", og et driftsmiljø som spiller sammen med build-serveren. Hos LAIT bruger vi en kombination af Bitbucket til Git, Azure DevOps til build og test, og så en kombination af f.eks. Azure-services, Netlify eller tilsvarende i forbindelse med driftsmiljøer.

LAIT vil meget gerne levere Continous Deployment til alle kunder

Det er vores overbevisning, at alle webløsninger har fordel af et Continous Deployment setup. Den agilitet der følger med et CD-setup er afgørende for alle webløsninger. Som nævnt i indledningen, er succes med CD en kombination af værktøjer, metodikker og kultur. Alle udviklere på holdet skal forstå at praktisere Continuous Integration, test-scenarier skal være fyldestgørende og platforme skal være på plads.

Når du tegner en serviceaftale for din webløsning hos LAIT, så er det centrale i denne aftale, at LAIT holder styr på alt vedrørende CI / CD. Det giver os mulighed for at rykke hurtigt når der er brug for det, og sikrer en kontinuerlig og struktureret udvikling af din løsning.