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.

  • ๐Ÿ”„ Definisjon: Utviklere integrerer kode daglig, og hver commit verifiseres av en automatisert bygging.
  • ๐Ÿšš CI vs. CD: CI tester alle endringer; Continuous Delivery sรธrger for at programvaren er tilgjengelig for utgivelse nรฅr som helst.
  • ๐Ÿงช Rรธrledning: Commit-utlรธsere bygger, tester og distribuerer faser i รฉn kontinuerlig flyt.
  • ๐Ÿงฐ Verktรธy: Jenkins, Bambooog TeamCity automatisere bygging og testing.
  • ๐Ÿ“‰ Fordel: Tidlig, hyppig testing betyr fรฆrre feil og raskere og tryggere utgivelser.
  • ๐Ÿค– AI-hjelp: AI-verktรธy oppdager ustabile tester og prioriterer byggefeil automatisk.

Hva er CI/CD

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.

Spรธrsmรฅl og svar

Kontinuerlig levering sรธrger for at alle endringer kan publiseres og distribueres til produksjon med manuell godkjenning. Kontinuerlig distribusjon fjerner denne porten, og frigir alle endringer som passerer pipelinen automatisk.

En typisk pipeline har stadier for kilde, bygging, testing, utgivelse og distribusjon. Code forpliktet til versjonskontroll kompileres, testes automatisk, deretter klargjรธres og slippes til produksjon.

Integrasjonshelvete er den smertefulle sammenslรฅingen av mange utvikleres endringer som lagres til slutten av et prosjekt. CI unngรฅr dette ved รฅ integrere og teste smรฅ endringer kontinuerlig.

Utfรธr commit tidlig og ofte, minst รฉn gang om dagen, i smรฅ arbeidsomfang. Hyppige commits gjรธr det enkelt รฅ teste endringer, enkelt รฅ slรฅ dem sammen og enkelt รฅ rulle dem tilbake om nรธdvendig.

En byggeartefakt er den pakkede utdataen fra en byggefil, for eksempel en JAR-fil, et containerbilde eller en binรฆrfil. Den samme artefakten promoteres gjennom testing og produksjon for konsistens.

Selvhostet CI kjรธrer pรฅ servere du administrerer, noe som gir full kontroll, men mer vedlikehold. Hostet (sky) CI vedlikeholdes av en leverandรธr og skaleres enkelt uten รฅ administrere infrastruktur.

AI forutsier hvilke tester som skal kjรธres for en gangs skyld, prioriterer risikofylte omrรฅder og automatiserer sortering av feil. Dette forkorter tilbakemeldingstiden og holder pipelines raske etter hvert som kodebasen vokser.

Ja. Maskinlรฆringsmodeller finner frem til tester som bestรฅr og feiler inkonsekvent, klyngerelaterte byggefeil og avdekker den sannsynlige rotรฅrsaken, hel.ping teamene sรธrger for at rรธrledningen er pรฅlitelig.

Oppsummer dette innlegget med: