Programiranje

Kaj je CI / CD? Razlaga stalne integracije in stalne dostave

Nenehna integracija (CI) in neprekinjena dostava (CD) poosebljata kulturo, nabor operativnih načel in zbirko praks, ki skupinam za razvoj aplikacij omogočajo pogostejše in zanesljivejše spremembe kod. Izvedba je znana tudi kot CI / CD cevovod.

CI / CD je ena najboljših praks za izvajanje ekip devopsov. To je tudi najboljša praksa agilne metodologije, saj skupinam za razvoj programske opreme omogoča, da se osredotočijo na izpolnjevanje poslovnih zahtev, kakovost kode in varnost, saj so koraki uvajanja avtomatizirani.

CI / CD definiran

Nenehno povezovanje je filozofija kodiranja in nabor praks, ki spodbujajo razvojne skupine k izvajanju majhnih sprememb in pogosto prijavi kodo v repozitorije za nadzor različic. Ker večina sodobnih aplikacij zahteva razvoj kode v različnih platformah in orodjih, skupina potrebuje mehanizem za vključitev in preverjanje sprememb.

Tehnični cilj CI je vzpostaviti dosleden in avtomatiziran način za izdelavo, pakiranje in preizkušanje aplikacij. Zaradi doslednosti vzpostavljenega procesa integracije je verjetneje, da bodo ekipe pogosteje izvajale spremembe kode, kar vodi do boljšega sodelovanja in kakovosti programske opreme.

Neprekinjena dostavapobere tam, kjer se nenehna integracija konča. CD avtomatizira dostavo aplikacij v izbrana infrastrukturna okolja. Večina skupin dela z različnimi okolji, razen s produkcijskimi, na primer z razvojnimi in preizkusnimi okolji, CD pa zagotavlja, da je na njih avtomatiziran način za potiskanje sprememb kode.

Orodja CI / CD pomagajo shraniti okoljevarstvene parametre, ki jih je treba pakirati ob vsaki dobavi. Nato avtomatizacija CI / CD izvede vse potrebne servisne klice na spletne strežnike, zbirke podatkov in druge storitve, ki jih bo morda treba znova zagnati ali slediti drugim postopkom ob uvajanju aplikacij.

Stalna integracija in stalna dobava zahtevataneprekinjeno testiranjeker je cilj uporabnikom dostaviti kakovostne aplikacije in kodo. Neprekinjeno testiranje se pogosto izvaja kot niz avtomatiziranih regresij, zmogljivosti in drugih testov, ki se izvajajo v cevovodu CI / CD.

Zrela praksa devopsov CI / CD ima možnost izvajanja neprekinjene razmestitve, kjer se spremembe aplikacij izvajajo po cevovodu CI / CD in se posredne gradnje uvedejo neposredno v produkcijska okolja. Skupine, ki vadijo neprekinjeno dostavo, se odločijo za proizvodnjo po dnevnem ali celo urnem urniku, čeprav neprekinjena dostava ni vedno optimalna za vsako poslovno aplikacijo.

Sorodni video: Kako hitreje dostaviti kodo s CI / CD

Kako nenehna integracija izboljšuje sodelovanje in kakovost

Nenehna integracija je razvojna filozofija, podprta s procesno mehaniko in nekaj avtomatizacije. Ko vadijo CI, razvijalci svojo kodo pogosto predajo v repozitorij za nadzor različic in večina ekip ima vsaj vsak dan minimalne standarde za odobritev kode. Utemeljitev tega je, da je lažje prepoznati napake in druge težave s kakovostjo programske opreme na manjših diferencialah kode kot na večjih, ki so se razvijale v daljšem časovnem obdobju. Poleg tega je pri razvijalcih, ki delajo na krajših ciklih predaj, manj verjetno, da bi več razvijalcev urejalo isto kodo in zahtevalo združitev pri predaji.

Skupine, ki izvajajo neprekinjeno integracijo, se pogosto začnejo z definicijami nadzora konfiguracije in praksami. Čeprav se preverjanje kode izvaja pogosto, se funkcije in popravki izvajajo tako v kratkem kot v daljšem časovnem obdobju. Razvojne skupine, ki vadijo neprekinjeno integracijo, uporabljajo različne tehnike za nadzor nad tem, katere funkcije in koda so pripravljene za izdelavo.

Številne ekipe uporabljajo funkcijske zastave, konfiguracijski mehanizem za vklop ali izklop funkcij in kode med izvajanjem. Funkcije, ki so še v razvoju, so v kodi ovite z zastavicami funkcij, razporejene z glavno vejo v produkcijo in izklopljene, dokler niso pripravljene za uporabo. Po nedavni raziskavi 63 odstotkov ekip, ki uporabljajo funkcijske zastave, poroča o boljših testiranjih in kakovostnejši programski opremi. Orodja za označevanje funkcij, kot so CloudBees Rollout, Optimizely Rollouts in LaunchDarkly, se integrirajo z orodji CI / CD in omogočajo konfiguracije na ravni funkcij.

Druga tehnika za upravljanje funkcij jerazvejanje nadzora različic. Izbrana je strategija razvejanja, kot je Gitflow, ki določa protokole nad tem, kako se nova koda združi v standardne veje za razvoj, testiranje in izdelavo. Ustvarijo se dodatne veje funkcij za tiste, ki bodo potrebovale daljše razvojne cikle. Ko je funkcija končana, lahko razvijalci nato združijo spremembe iz vej lastnosti v primarno vejo razvoja. Ta pristop deluje dobro, vendar ga lahko postane težko upravljati, če se hkrati razvijajo številne funkcije.

Sam postopek izdelave se nato avtomatizira tako, da se zapakira vsa programska oprema, baza podatkov in druge komponente. Če bi na primer razvijali aplikacijo Java, bi CI zapakiral vse datoteke statičnega spletnega strežnika, kot so HTML, CSS in JavaScript, skupaj z aplikacijo Java in vsemi skripti baze podatkov.

CI ne vključuje samo programske opreme in komponent baze podatkov, temveč bo avtomatizacija izvajala tudi enote in druga testiranja. To testiranje daje razvijalcem povratne informacije, da njihove spremembe kode niso prekinile nobenega obstoječega preskusa enote.

Večina orodij CI / CD omogoča razvijalcem, da začnejo graditi na zahtevo, ki jo sprožijo predpisi kode v repozitoriju za nadzor različic ali po določenem urniku. Ekipe se morajo pogovoriti o urniku izdelave, ki najbolje ustreza velikosti ekipe, pričakovanemu številu dnevnih opravkov in drugih vidikih uporabe. Najboljša praksa za zagotovitev, da so prevzemi in gradnje hitri, sicer lahko ovira napredek skupin, ki poskušajo hitro kodirati in pogosto izvajati prevzeme.

Neprekinjeno testiranje presega avtomatizacijo preskusov

Avtomatizirani okviri za testiranje pomagajo inženirjem za zagotavljanje kakovosti opredeliti, izvajati in avtomatizirati različne vrste testov, ki lahko razvojnim skupinam pomagajo vedeti, ali programska oprema poteka ali ne. Vključujejo preskuse funkcionalnosti, ki so razviti na koncu vsakega sprinta in združeni v regresijski test za celotno aplikacijo. Ti regresijski testi nato obvestijo ekipo, ali je sprememba kode neuspešna pri enem ali več testih, razvitih na vseh funkcionalnih področjih aplikacije, kjer je pokritost s testi.

Najboljša praksa je, da razvijalci omogočijo in zahtevajo izvajanje vseh ali podskupine regresijskih testov v svojih lokalnih okoljih. Ta korak zagotavlja, da razvijalci predpišejo kodo za nadzor različic šele po tem, ko regresijski testi prenesejo spremembe kode.

Regresijski testi so šele začetek. Testiranje zmogljivosti, testiranje API-jev, statična analiza kode, varnostno testiranje in drugi preskusni obrazci so lahko tudi avtomatizirani. Ključno je, da lahko te preizkuse sprožite prek ukazne vrstice, spletnega kavlja ali spletne storitve in da se odzovejo s kodami stanja.

Ko je testiranje avtomatizirano, neprekinjeno testiranje pomeni, da je avtomatizacija integrirana v cevovod CI / CD. Nekatere enote in preizkuse funkcionalnosti je mogoče integrirati v CI, ki označujejo težave pred ali med integracijskim postopkom. Preizkusi, ki zahtevajo celotno dostavno okolje, kot so preizkušanje zmogljivosti in varnosti, so pogosto integrirani v CD in izvedeni po dostavi zgradb v ciljna okolja.

Cevovod CD avtomatizira spremembe v več okoljih

Neprekinjena dostava je avtomatizacija, ki potisne aplikacije v dostavna okolja. Večina razvojnih skupin ima običajno eno ali več razvojnih in preskusnih okolij, kjer se spremembe aplikacij uredijo za testiranje in pregled. Za avtomatizacijo korakov in poročanje se uporablja orodje CI / CD, kot so Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo ali Travis CI.

Tipičen cevovod CD ima faze izdelave, preizkušanja in uvajanja. Prefinjenejši cevovodi vključujejo številne od teh korakov:

  • Vlečenje kode iz nadzora različic in izvajanje gradnje.
  • Izvajanje vseh potrebnih korakov infrastrukture, ki so avtomatizirani kot koda za vstajanje ali rušenje infrastrukture v oblaku.
  • Premikanje kode v ciljno računalniško okolje.
  • Upravljanje spremenljivk okolja in njihovo konfiguriranje za ciljno okolje.
  • Potiskanje komponent aplikacije v ustrezne storitve, kot so spletni strežniki, storitve API in storitve zbirk podatkov.
  • Izvedba vseh korakov, potrebnih za ponovni zagon storitev ali klicanje končnih točk storitve, ki so potrebne za potiske nove kode.
  • Izvajanje neprekinjenih preskusov in okolij za vračanje, če testi ne uspejo.
  • Zagotavljanje podatkov dnevnika in opozoril o stanju dostave.

Uporabniki Jenkinsa na primer definirajo svoje cevovode v datoteki Jenkins, ki opisuje različne stopnje, kot so gradnja, testiranje in uvajanje. Spremenljivke okolja, možnosti, tajni ključi, certifikati in drugi parametri so navedeni v datoteki in nato postopoma navedeni. Oddelek za objave obravnava pogoje napak in obvestila.

Prefinjenejši CD lahko vsebuje tudi druge korake, na primer izvajanje sinhronizacije podatkov, arhiviranje informacijskih virov ali izvajanje popravkov aplikacij in knjižnic. Orodja CI / CD običajno podpirajo trg vtičnikov. Jenkins na primer našteva več kot 1500 vtičnikov, ki podpirajo integracijo s tujimi platformami, uporabniški vmesnik, skrbništvo, upravljanje izvorne kode in upravljanje zgradb.

Ko je orodje CI / CD izbrano, morajo razvojne skupine zagotoviti, da so vse spremenljivke okolja konfigurirane zunaj aplikacije. Orodja CI / CD omogočajo nastavitev teh spremenljivk, prikrivanje spremenljivk, kot so gesla in ključi računa, in njihovo konfiguriranje ob uvajanju za ciljno okolje.

Orodja za CD nudijo tudi nadzorno ploščo in funkcije poročanja. Če gradnje ali dostave ne uspejo, razvijalce opozorijo z informacijami o napakah. Integrirajo se z nadzorom različic in gibčnimi orodji, tako da jih je mogoče uporabiti za iskanje sprememb kode in uporabniških zgodb, ki sestavljajo zgradbo.

Implementacija CI / CD cevovodov s Kubernetes in brez strežniških arhitektur

Mnoge ekipe, ki upravljajo cevovode CI / CD v okoljih v oblaku, uporabljajo tudi vsebnike, kot so Docker in orkestracijski sistemi, kot je Kubernetes. Zabojniki omogočajo pakiranje in pošiljanje aplikacij na običajne, prenosne načine. Zabojniki olajšajo razširitev ali rušenje okolij z različnimi delovnimi obremenitvami.

Obstaja veliko pristopov k skupni uporabi vsebnikov, infrastrukture kot kode in cevovodov CI / CD. Možnosti lahko raziščete z vajami, kot sta Kubernetes z Jenkinsom ali Kubernetes z Azure DevOps.

Računalniške arhitekture brez strežnika predstavljajo še eno pot za uvajanje in skaliranje aplikacij. V okolju brez strežnikov infrastrukturo v celoti upravlja ponudnik storitev v oblaku in aplikacija po potrebi porabi vire glede na svojo konfiguracijo. Na primer na AWS, brezstrežniške aplikacije, ki se izvajajo kot funkcije Lambda, lahko razmestitve z vtičnikom integrirate v cevovod Jenkins CI / CD.

CI / CD omogoča pogostejše uvajanje kode

Če povzamemo, paketi in preizkusi programske opreme CI gradijo in opozarjajo razvijalce, če njihove spremembe niso uspele na nobenem preizkusu enote. CD je avtomatizacija, ki prinaša spremembe v infrastrukturo in izvaja dodatne teste.

Cevovodi CI / CD so namenjeni podjetjem, ki želijo pogosto izboljševati aplikacije in potrebujejo zanesljiv postopek dostave. Dodaten napor za standardizacijo zgradb, razvoj testov in avtomatizacijo uvajanja je proizvodni postopek za uvajanje sprememb kode. Ko je enkrat postavljen, omogoča skupinam, da se osredotočijo na postopek izboljšanja aplikacij in manj na sistemske podrobnosti njihove dostave v računalniško okolje.

CI / CD je najboljša praksa za devops, ker obravnava neusklajenost med razvijalci, ki želijo pogosto pritiskati na spremembe, z operacijami, ki želijo stabilne aplikacije. Z avtomatizacijo lahko razvijalci pogosteje zahtevajo spremembe. Operacijske ekipe vidijo večjo stabilnost, ker imajo okolja standardne konfiguracije, v postopku dostave potekajo stalna testiranja, spremenljivke okolja so ločene od aplikacije in postopki vračanja so avtomatizirani.

Vpliv izvajanja cevovodov CI / CD lahko merimo kot ključni indikator uspešnosti devops (KPI). Ključni kazalniki uspešnosti, kot so pogostost uvajanja, čas izvedbe sprememb in srednji čas do obnovitve (MTTR) iz incidenta, se pogosto izboljšajo, ko se uvede CI / CD z neprekinjenim testiranjem. Vendar je CI / CD le en postopek, ki lahko spodbudi te izboljšave, obstajajo pa tudi drugi predpogoji za izboljšanje frekvenc uvajanja.

Če želite začeti s CI / CD, morajo razvojne in operativne skupine sodelovati pri tehnologijah, praksah in prednostnih nalogah. Skupine morajo razviti soglasje o pravih pristopih za svoje poslovanje in tehnologije, tako da bo ekipa, ko bo vzpostavljena CI / CD, vkrcala in dosledno sledila praksam.

$config[zx-auto] not found$config[zx-overlay] not found