Hva er CI/CD? Kontinuerlig integrasjon og kontinuerlig levering
โก Smart oppsummering
Kontinuerlig integrasjon er en programvareutviklingspraksis der teammedlemmer slรฅr sammen arbeidet sitt til et delt arkiv minst daglig, og hver commit utlรธser en automatisert bygging og test for รฅ fange opp integrasjonsfeil tidlig.

Hva er kontinuerlig integrasjon (CI)?
Kontinuerlig integrasjon er en programvareutviklingsmetode der teammedlemmer integrerer arbeidet sitt minst รฉn gang om dagen. Hver integrasjon verifiseres av en automatisert konstruksjon som oppdager feil. Konseptet ble introdusert for over to tiรฅr siden for รฅ unngรฅ ยซintegrasjonshelveteยป, som skjer nรฅr integrasjon utsettes til slutten av et prosjekt.
Etter en kode-commit bygges og testes programvaren umiddelbart. I et stort prosjekt med mange utviklere skjer commits mange ganger om dagen. Med hver commit bygges og testes koden. Hvis testen bestรฅr, kontrolleres byggingen for distribusjon. Hvis distribusjonen lykkes, sendes koden til produksjon. Denne commit-, bygge-, test- og distribusjonssyklusen er kontinuerlig, noe som gir praksisen navnet sitt.
Hva er kontinuerlig levering (CD)?
Kontinuerlig Levering er en programvareutviklingsmetode der et team utvikler programvare i korte sykluser og sรธrger for at den kan lanseres pรฅlitelig nรฅr som helst. Mรฅlet er รฅ bygge, teste og lansere programvare med god hastighet og frekvens, noe som reduserer kostnader, tid og risiko ved รฅ levere endringer gjennom hyppige produksjonsoppdateringer.
Forskjellen mellom CI og CD
Kontinuerlig integrasjon er en tilnรฆrming for รฅ teste hver endring i kodebasen automatisk, mens kontinuerlig levering er en tilnรฆrming for รฅ fรฅ endringer som nye funksjoner, konfigurasjon og feilrettinger inn i produksjon pรฅ en trygg og rask mรฅte.
Utvikling uten CI vs. utvikling med CI
| Utvikling uten CI | Utvikling med CI |
|---|---|
| Mange feil | Fรฆrre feil |
| Sjeldne forpliktelser | Regelmessige forpliktelser |
| Sjeldne og langsomme utgivelser | Vanlige arbeidsutgivelser |
| Vanskelig integrering | Enkel og effektiv integrering |
| Testing skjer sent | Testing skjer tidlig og ofte |
| Problemer er vanskeligere รฅ fikse | Problemer blir funnet og fikset raskere |
| Dรฅrlig prosjektsynlighet | Bedre prosjektsynlighet |
Forskjellen mellom kompilering og kontinuerlig integrasjon
Mens kompilering bare konverterer kode til maskinsprรฅk, utfรธrer CI flere bredere aktiviteter:
- DB-integrasjon: Holder databasen og koden synkronisert og automatiserer opprettelsen av databasen og testdataene.
- Code undersรธkelse: Sikrer en sunn kodebase, identifiserer problemer tidlig og anvender beste praksis.
- Automatisert distribusjon: Lar deg frigi produktet nรฅr som helst og holder det i en kontinuerlig demobar tilstand.
- Dokumentgenerering: Holder dokumentasjonen oppdatert og produserer byggerapporter og mรฅlinger.
- Samling: Konverterer kode pรฅ hรธyt nivรฅ til maskinsprรฅk og sรธrger for at den kompileres pรฅ alle mรฅlplattformer.
Ideelt sett kjรธres byggingen fra kommandolinjen i stedet for รฅ vรฆre avhengig av en IDE, skjer kontinuerlig pรฅ en dedikert CI-server (ikke en cron-jobb), utlรธses ved hver innsjekking og gir umiddelbar tilbakemelding uten utvikleranstrengelse.
Hva trenger du for รฅ gjennomfรธre CI-prosessen?
- Versjonskontrollsystem (VCS): En pรฅlitelig metode for รฅ sentralisere og bevare endringer som gjรธres i prosjektet ditt over tid.
- Virtuell maskin: En ekstra server eller minst รฉn virtuell maskin รฅ bygge systemet ditt.
- Lรธsninger for vertsbaserte CI-verktรธy: For รฅ unngรฅ รฅ administrere servere, vedlikeholder hostede lรธsninger hele prosessen og tilbyr enklere skalerbarhet.
- Verktรธy: Hvis du velger en selvhostet variant, installer et CI-verktรธy som f.eks. Jenkins, TeamCity, Bamboo, eller GitLab.
Hvordan fungerer kontinuerlig integrasjon?
Et gammelt eksempel er Nokia, som en gang brukte en prosedyre kalt ยซnightly buildยป. Etter flere commits fra mange utviklere i lรธpet av dagen, ble programvaren bygget hver natt. Fordi den bare ble bygget รฉn gang om dagen, var det smertefullt รฅ isolere, identifisere og fikse feil i en stor kodebase.
Later Teamet tok i bruk kontinuerlig integrasjon. Programvaren ble bygget og testet sรฅ snart en utvikler la koden i verk, slik at enhver feil ble oppdaget umiddelbart og den ansvarlige utvikleren kunne fikse feilen raskt.
Egenskaper til CI
- Lar deg vedlikeholde ett enkelt kildelager.
- Lar deg teste en klon av produksjonsmiljรธet, holdt nรฆr produksjonsmiljรธet.
- Gir konstant tilgjengelighet av en gjeldende versjon.
- Gjรธr hele bygge-, test- og distribusjonsprosessen synlig for alle interessenter.
Hvorfor bruke CI?
- Hjelper deg med รฅ bygge programvare av bedre kvalitet og utfรธre repeterbar testing.
- Skalerer leveranseutbyttet til ingeniรธrteam og lar utviklere jobbe med funksjoner parallelt.
- รker synlighet og kommunikasjon pรฅ tvers av teamet.
- Gir umiddelbar tilbakemelding nรฅr et problem oppstรฅr og reduserer risikoen ved รฅ gjรธre utrullingen raskere og mer forutsigbar.
- Unngรฅr forvirring i siste liten ved utgivelsestidspunktet.
Beste praksis for bruk av CI-systemer
- Utfรธr tidlig og ofte, og aldri utfรธr รธdelagt kode.
- Rett opp byggefeil umiddelbart og handle basert pรฅ mรฅlinger.
- Bygg i alle mรฅlmiljรธer og lag artefakter fra hver byggprosess.
- Automatiser byggingen slik at den ikke er avhengig av et IDE.
- Bygg og test alt nรฅr det endres, inkludert databaseskjemaet.
- Hold byggingen rask og bruk automatisert distribusjon.
Ulemper med CI
- Det kreves tid for innledende oppsett og opplรฆring for รฅ bli vant til en CI-server.
- Egnede testprosedyrer mรฅ utvikles, og en godt bygget testsuite krever betydelige ressurser.
- Kjente prosesser mรฅ konverteres, og det kreves flere servere og miljรธer.
- Ventetider kan oppstรฅ nรฅr flere utviklere รธnsker รฅ integrere koden sin samtidig.
Verktรธy for CI-prosessen
Jenkins
Jenkins er et รฅpen kildekode-verktรธy for kontinuerlig integrasjon skrevet i JavaDet forenkler sanntidstesting og rapportering av isolerte endringer i en stรธrre kodebase, og hjelper utviklere med รฅ finne og lรธse feil raskt samtidig som det automatiserer byggetesting.
Bamboo
Bamboo er en kontinuerlig integrasjonsbyggeserver som utfรธrer automatisert bygging, testing og utgivelse pรฅ ett sted. Den fungerer sรธmlรธst med Jira og Bitbucket og stรธtter mange teknologier som Docker, Git, SVN, Mercurial og AWS.
TeamCity
TeamCity er en kontinuerlig integrasjonsserver med mange kraftige funksjoner. Den holder CI-serveren sunn og stabil selv nรฅr ingen bygg kjรธrer, og gir bedre kodekvalitet for ethvert prosjekt.
