Hvad er CI/CD? Kontinuerlig integration og kontinuerlig levering
โก Smart opsummering
Kontinuerlig integration er en softwareudviklingspraksis, hvor teammedlemmer fletter deres arbejde sammen i et delt arkiv mindst dagligt, og hver commit udlรธser en automatiseret build og test for at opdage integrationsfejl tidligt.

Hvad er Continuous Integration (CI)?
Kontinuerlig integration er en softwareudviklingsmetode, hvor teammedlemmer integrerer deres arbejde mindst รฉn gang om dagen. Hver integration verificeres af en automatiseret build, der registrerer fejl. Konceptet blev introduceret for over to รฅrtier siden for at undgรฅ "integrationshelvede", hvilket sker, nรฅr integration udskydes til slutningen af โโet projekt.
Efter en kode-commit bygges og testes softwaren med det samme. I et stort projekt med mange udviklere sker der commits mange gange om dagen. Med hver commit bygges og testes koden; hvis testen bestรฅr, kontrolleres buildet for implementering; og hvis implementeringen lykkes, sendes koden til produktion. Denne commit-, build-, test- og implementeringscyklus er kontinuerlig, hvilket giver praksissen sit navn.
Hvad er Continuous Delivery (CD)?
Kontinuerlig tilfรธrsel er en softwareudviklingsmetode, hvor et team udvikler software i korte cyklusser og sikrer, at den kan udgives pรฅlideligt nรฅr som helst. Mรฅlet er at bygge, teste og udgive software med god hastighed og hyppighed, hvilket reducerer omkostningerne, tiden og risikoen ved at levere รฆndringer gennem hyppige produktionsopdateringer.
Forskellen mellem CI og CD
Kontinuerlig integration er en tilgang til automatisk at teste hver รฆndring i kodebasen, hvorimod Continuous Delivery er en tilgang til at fรฅ รฆndringer sรฅsom nye funktioner, konfiguration og fejlrettelser i produktion sikkert og hurtigt.
Udvikling uden CI vs. udvikling med CI
| Udvikling uden CI | Udvikling med CI |
|---|---|
| Masser af fejl | Fรฆrre fejl |
| Sjรฆldent forpligter sig | Regelmรฆssige commits |
| Sjรฆldne og langsomme udgivelser | Regelmรฆssige arbejdsudgivelser |
| Svรฆr integration | Nem og effektiv integration |
| Testen sker sent | Testning sker tidligt og ofte |
| Problemer er svรฆrere at lรธse | Problemer findes og lรธses hurtigere |
| Dรฅrlig projektsynlighed | Bedre projekt synlighed |
Forskellen mellem kompilering og kontinuerlig integration
Mens kompilering kun konverterer kode til maskinsprog, udfรธrer CI flere bredere aktiviteter:
- DB-integration: Holder databasen og koden synkroniseret og automatiserer oprettelsen af โโdatabasen og testdata.
- Code inspektion: Sikrer en sund kodebase, identificerer problemer tidligt og anvender bedste praksis.
- Automatiseret implementering: Giver dig mulighed for at frigive produktet nรฅr som helst og holder det i en kontinuerligt demobar tilstand.
- Dokumentgenerering: Holder dokumentationen opdateret og producerer byggerapporter og metrikker.
- Samling: Konverterer kode pรฅ hรธjt niveau til maskinsprog og sikrer, at den kompilerer pรฅ alle mรฅlplatforme.
Ideelt set kรธrer buildet fra kommandolinjen i stedet for at vรฆre afhรฆngigt af et IDE, sker kontinuerligt pรฅ en dedikeret CI-server (ikke et cron-job), udlรธses ved hver check-in og giver รธjeblikkelig feedback uden udviklerindsats.
Hvad skal du bruge for at gennemfรธre CI-processen?
- Versionskontrolsystem (VCS): En pรฅlidelig metode til at centralisere og bevare รฆndringer foretaget i dit projekt over tid.
- Virtuel maskine: En ekstra server eller mindst รฉn virtuel maskine at bygge dit system.
- Hostede CI-vรฆrktรธjslรธsninger: For at undgรฅ at administrere servere, vedligeholder hostede lรธsninger hele processen og tilbyder nemmere skalerbarhed.
- Vรฆrktรธjer: Hvis du vรฆlger en selvhostet variant, skal du installere et CI-vรฆrktรธj som f.eks. Jenkins, TeamCity, Bambooeller GitLab.
Hvordan fungerer kontinuerlig integration?
Et gammelt eksempel er Nokia, som engang brugte en procedure kaldet nightly build. Efter flere commits fra mange udviklere i lรธbet af dagen blev softwaren bygget hver nat. Fordi den kun blev bygget รฉn gang om dagen, var det smertefuldt at isolere, identificere og rette fejl i en stor kodebase.
Later Teamet anvendte kontinuerlig integration. Softwaren blev bygget og testet, sรฅ snart en udvikler committede kode, sรฅ enhver fejl blev opdaget med det samme, og den ansvarlige udvikler kunne hurtigt rette fejlen.
Funktioner af CI
- Giver dig mulighed for at vedligeholde et enkelt kildelager.
- Lader dig teste en klon af produktionsmiljรธet, der holdes tรฆt pรฅ produktionsmiljรธet.
- Giver konstant tilgรฆngelighed af en aktuel build.
- Gรธr hele bygge-, test- og implementeringsprocessen synlig for alle interessenter.
Hvorfor bruge CI?
- Hjรฆlper dig med at bygge software af bedre kvalitet og udfรธre gentagne tests.
- Skalerer leveringsoutputtet fra ingeniรธrteams og lader udviklere arbejde parallelt pรฅ funktioner.
- รger synlighed og kommunikation pรฅ tvรฆrs af teamet.
- Giver รธjeblikkelig feedback, nรฅr der opstรฅr et problem, og reducerer risikoen ved at gรธre implementeringen hurtigere og mere forudsigelig.
- Undgรฅr forvirring i sidste รธjeblik ved udgivelsestidspunktet.
Bedste praksis for brug af CI-systemer
- Commit tidligt og ofte, og commit aldrig รธdelagt kode.
- Ret buildfejl med det samme, og handl pรฅ metrikker.
- Byg i alle mรฅlmiljรธer og skab artefakter fra alle builds.
- Automatiser build'et, sรฅ det ikke er afhรฆngigt af et IDE.
- Byg og test alt, nรฅr det รฆndres, inklusive databaseskemaet.
- Hold byggeprocessen hurtig, og brug automatiseret implementering.
Ulemper ved CI
- Det krรฆver tid til indledende opsรฆtning og trรฆning at vรฆnne sig til en CI-server.
- Der skal udvikles passende testprocedurer, og en veludviklet testsuite krรฆver betydelige ressourcer.
- Kendte processer skal konverteres, og yderligere servere og miljรธer er nรธdvendige.
- Ventetider kan opstรฅ, nรฅr flere udviklere รธnsker at integrere deres kode pรฅ samme tid.
Vรฆrktรธjer til CI-processen
Jenkins
Jenkins er et open source-vรฆrktรธj til kontinuerlig integration skrevet i JavaDet muliggรธr realtidstestning og rapportering af isolerede รฆndringer i en stรธrre kodebase og hjรฆlper udviklere med hurtigt at finde og lรธse fejl, samtidig med at det automatiserer build-testning.
Bamboo
Bamboo er en build-server med kontinuerlig integration, der udfรธrer automatiseret build, test og release pรฅ รฉt sted. Den fungerer problemfrit med Jira og Bitbucket og understรธtter mange teknologier som Docker, Git, SVN, Mercurial og AWS.
TeamCity
TeamCity er en server for kontinuerlig integration med mange kraftfulde funktioner. Den holder CI-serveren sund og stabil, selv nรฅr der ikke kรธrer nogen builds, og giver bedre kodekvalitet til ethvert projekt.
