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.

  • ๐Ÿ”„ Definition: Udviklere integrerer kode dagligt, og hver commit verificeres af en automatiseret build.
  • ๐Ÿšš CI vs. CD: CI tester alle รฆndringer; Continuous Delivery sรธrger for, at softwaren kan udgives nรฅr som helst.
  • ๐Ÿงช Pipeline: Commit-udlรธsere bygger, tester og implementerer faser i รฉt kontinuerligt flow.
  • ๐Ÿงฐ Vรฆrktรธjer: Jenkins, Bambooog TeamCity automatisere bygning og testning.
  • ๐Ÿ“‰ Fordel: Tidlig, hyppig testning betyder fรฆrre fejl og hurtigere og sikrere udgivelser.
  • ๐Ÿค– AI Assistance: AI-vรฆrktรธjer registrerer ustabile tests og prioriterer automatisk build-fejl.

Hvad er CI/CD

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.

Ofte Stillede Spรธrgsmรฅl

Kontinuerlig levering holder alle รฆndringer frigivbare og implementeres i produktion med manuel godkendelse. Kontinuerlig implementering fjerner denne gate og frigiver automatisk alle รฆndringer, der passerer pipelinen.

En typisk pipeline har faser som kilde, build, test, release og deployment. Code dedikeret til versionskontrol kompileres, testes automatisk, forberedes derefter og frigives til produktion.

Integrationshelvede er den smertefulde sammenlรฆgning af mange udvikleres รฆndringer, der gemmes indtil slutningen af โ€‹โ€‹et projekt. CI undgรฅr det ved at integrere og teste smรฅ รฆndringer kontinuerligt.

Commit tidligt og ofte, mindst รฉn gang om dagen, i smรฅ, arbejdsomfattende intervaller. Hyppige commits gรธr det nemt at teste รฆndringer, nemt at flette dem sammen og nemt at rulle dem tilbage, hvis det er nรธdvendigt.

En build-artefakt er det pakkede output fra en build, sรฅsom en JAR-fil, et containerbillede eller en binรฆr fil. Den samme artefakt promoveres gennem test og produktion for at sikre konsistens.

Selvhostet CI kรธrer pรฅ servere, du administrerer, hvilket giver fuld kontrol, men mere vedligeholdelse. Hostet (cloud) CI vedligeholdes af en udbyder og skaleres nemt uden administration af infrastruktur.

AI forudsiger, hvilke tests der skal kรธres til en gangs skyld, prioriterer risikofyldte omrรฅder og automatiserer triage af fejl. Dette forkorter feedbacktiden og holder pipelines hurtige, efterhรฅnden som kodebasen vokser.

Ja. Maskinlรฆringsmodeller finder frem til tests, der bรฅde bestรฅr og fejler inkonsekvent, klyngerelaterede buildfejl og afslรธrer den sandsynlige rodรฅrsag, hel.ping Holdene sรธrger for, at pipelinen er pรฅlidelig.

Opsummer dette indlรฆg med: