Što je CI / CD? Objašnjena kontinuirana integracija i kontinuirana isporuka

Kontinuirana integracija (CI) i kontinuirana isporuka (CD) utjelovljuju kulturu, skup operativnih principa i zbirku praksi koje omogućavaju timovima za razvoj aplikacija da češće i pouzdanije isporučuju promjene koda. Implementacija je poznata i kao CI / CD cjevovod. 

CI / CD je jedna od najboljih praksi za sprovođenje timova devopsa. To je također najbolja praksa agilne metodologije, jer omogućava timovima za razvoj softvera da se usredotoče na ispunjavanje poslovnih zahtjeva, kvalitetu koda i sigurnost, jer su koraci implementacije automatizirani.

CI / CD definiran

Kontinuirana integracija  filozofija je kodiranja i skup praksi koji potiču razvojne timove da implementiraju male promjene i često prijavljuju kod u spremišta za kontrolu verzija. Budući da većina modernih aplikacija zahtijeva razvoj koda na različitim platformama i alatima, timu je potreban mehanizam za integriranje i provjeru valjanosti njihovih promjena.

Tehnički cilj CI-a je uspostaviti dosljedan i automatiziran način izrade, pakiranja i testiranja aplikacija. Uz dosljednost uspostavljenog procesa integracije, timovi će vjerojatnije češće izvršavati promjene koda, što dovodi do bolje suradnje i kvalitete softvera.

Kontinuirana isporuka se  nastavlja tamo gdje završava kontinuirana integracija. CD automatizira isporuku aplikacija u odabrana infrastrukturna okruženja. Većina timova radi s više okruženja koja nisu proizvodna, poput razvojnih i testnih okruženja, a CD osigurava da postoji automatiziran način da se na njih potaknu promjene koda.

CI / CD alati pomažu u pohrani parametara specifičnih za okoliš koji se moraju pakirati uz svaku isporuku. CI / CD automatizacija tada izvodi sve potrebne servisne pozive web poslužiteljima, bazama podataka i drugim uslugama koje će možda trebati ponovno pokrenuti ili slijediti druge postupke prilikom primjene aplikacija.

Kontinuirana integracija i kontinuirana isporuka zahtijevaju  kontinuirano testiranje,  jer je cilj isporuka kvalitetnih aplikacija i koda korisnicima. Kontinuirano testiranje često se provodi kao skup automatizirane regresije, performansi i drugih testova koji se izvode u CI / CD cjevovodu.

Zrela praksa devopskog CI / CD-a ima mogućnost implementacije kontinuiranog postavljanja tamo gdje se promjene aplikacija provode kroz CI / CD cjevovod i prolazeće gradnje postavljaju se izravno u proizvodna okruženja. Timovi koji se bave kontinuiranom isporukom odlučuju se za proizvodnju na dnevnom ili čak satnom rasporedu, iako kontinuirana dostava nije uvijek optimalna za svaku poslovnu aplikaciju.  

Povezani video: Kako brže isporučiti kod s CI / CD-om

Kako kontinuirana integracija poboljšava suradnju i kvalitetu

Neprekidna integracija razvojna je filozofija potpomognuta procesnom mehanikom i određenom automatizacijom. Kada vježbaju CI, programeri često predaju svoj kôd u spremište kontrole verzija, a većina timova ima minimalni standard predavanja koda barem svakodnevno. Razlog tome je što je lakše prepoznati nedostatke i druge probleme s kvalitetom softvera na manjim diferencijalnim kodovima, nego na većim koji su se razvijali tijekom dužeg vremenskog razdoblja. Osim toga, kada programeri rade na kraćim ciklusima urezivanja, manja je vjerojatnost da više programera uređuje isti kod i zahtijeva spajanje prilikom urezivanja.

Timovi koji provode kontinuiranu integraciju često započinju definicijama konfiguracije i vježbanja kontrole verzija. Iako se provjera koda vrši često, značajke i popravci implementirani su i u kratkom i u dužem vremenskom okviru. Razvojni timovi koji vježbaju kontinuiranu integraciju koriste različite tehnike kako bi kontrolirali koje su značajke i kod spremni za proizvodnju.

Mnogi timovi koriste zastavice značajki , konfiguracijski mehanizam za uključivanje ili isključivanje značajki i koda u vrijeme izvođenja. Značajke koje su još uvijek u razvoju omotane su zastavicama značajki u kodu, raspoređene s glavnom granom u proizvodnju i isključene dok ne budu spremne za upotrebu. Prema nedavnom istraživanju, 63 posto timova koji koriste zastave značajki izvještava o boljem testiranju i kvalitetnijem softveru. Alati za označavanje značajki kao što su CloudBees Rollout, Optimizely Rollouts i LaunchDarkly integriraju se s CI / CD alatima i omogućuju konfiguracije na razini značajki.

Druga tehnika za upravljanje značajkama je  grananje kontrole verzija . Strategija grananja kao što je Gitflow odabrana je za definiranje protokola nad načinom spajanja novog koda u standardne grane za razvoj, ispitivanje i proizvodnju. Dodatne grane značajki stvorene su za one kojima će trebati duži razvojni ciklusi. Kada je značajka dovršena, programeri tada mogu spojiti promjene iz grana značajki u primarnu granu razvoja. Ovaj pristup dobro funkcionira, ali može postati teško upravljati ako se istovremeno razvijaju mnoge značajke.

Sam postupak izrade zatim se automatizira pakiranjem sveg softvera, baze podataka i ostalih komponenti. Na primjer, ako razvijate Java aplikaciju, CI bi spakirao sve datoteke statičnog web poslužitelja kao što su HTML, CSS i JavaScript, zajedno s Java aplikacijom i svim skriptama baze podataka.

CI ne samo da pakira sav softver i komponente baze podataka, već će automatizacija provoditi i jedinična ispitivanja i druga ispitivanja. Ovo testiranje pruža povratnu informaciju programerima da njihove promjene koda nisu razbile postojeće jedinične testove.

Većina CI / CD alata omogućuje razvojnim programerima da započnu graditi na zahtjev, pokreću ih urezivanja koda u spremištu kontrole verzija ili prema definiranom rasporedu. Timovi moraju razgovarati o rasporedu izrade koji najbolje odgovara veličini tima, broju očekivanih dnevnih izvršavanja i ostalim razmatranjima oko prijave. Najbolja praksa da se osigura da su urezivanja i izrade brzi, u suprotnom može spriječiti napredak timova koji pokušavaju brzo kodirati i često urezivati.

Kontinuirano testiranje nadilazi automatizaciju ispitivanja

Automatizirani okviri za ispitivanje pomažu inženjerima osiguranja kvalitete da definiraju, izvršavaju i automatiziraju razne vrste testova koji razvojnim timovima mogu pomoći da znaju prolazi li ili ne softverska gradnja. Uključuju testove funkcionalnosti koji se razvijaju na kraju svakog sprinta i objedinjuju u regresijski test za cijelu aplikaciju. Ovi regresijski testovi zatim obavještavaju tim je li promjena koda zakazala u jednom ili više testova razvijenih u svim funkcionalnim područjima aplikacije u kojima postoji ispitivanje.

Najbolja praksa je omogućiti i zahtijevati od programera da pokrenu sve ili podskup regresijskih testova u svom lokalnom okruženju. Ovaj korak osigurava da programeri predaju kod kontroli verzija samo nakon što regresijski testovi proslijede promjene koda.

Regresijski testovi su samo početak. Testiranje izvedbe, API testiranje, statička analiza koda, sigurnosno testiranje i drugi obrasci za testiranje mogu se također automatizirati. Ključ je u mogućnosti pokretanja ovih testova bilo putem naredbenog retka, web-kuke ili web-usluge i da oni odgovore kodovima uspjeha ili neuspjeha.

Jednom kada je testiranje automatizirano, kontinuirano testiranje podrazumijeva da je automatizacija integrirana u CI / CD cjevovod. Neki testovi jedinica i funkcionalnosti mogu se integrirati u CI koji označava probleme prije ili tijekom procesa integracije. Testovi koji zahtijevaju potpuno okruženje za isporuku, poput testiranja performansi i sigurnosti, često se integriraju u CD i izvode nakon što se izrade isporuče u ciljana okruženja.

CD cjevovod automatizira promjene u više okruženja

Kontinuirana isporuka je automatizacija koja aplikacije tjera u okruženja za isporuku. Većina razvojnih timova obično ima jedno ili više razvojnih i testnih okruženja u kojima se promjene aplikacija postavljaju na testiranje i pregled. Alat CI / CD kao što su Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo ili Travis CI koristi se za automatizaciju koraka i pružanje izvješća.

Tipični CD cjevovod ima faze izrade, testiranja i postavljanja. Sofisticiraniji cjevovodi uključuju mnoge od ovih koraka:

  • Povlačenje koda iz kontrole verzija i izvršavanje gradnje.
  • Izvršavanje svih potrebnih koraka infrastrukture koji su automatizirani kao kôd za ustajanje ili rušenje oblačne infrastrukture.
  • Premještanje koda u ciljno računarsko okruženje.
  • Upravljanje varijablama okoline i njihovo konfiguriranje za ciljno okruženje.
  • Guranje komponenata aplikacije na njihove odgovarajuće usluge, poput web poslužitelja, API usluga i usluga baza podataka.
  • Izvršavanje svih koraka potrebnih za ponovno pokretanje usluga ili pozivanje krajnjih točaka usluge koje su potrebne za guranje novog koda.
  • Izvođenje kontinuiranih testova i okolina vraćanja u slučaju da testovi ne uspiju.
  • Pružanje podataka dnevnika i upozorenja o stanju isporuke.

Kao primjer, Jenkinsovi korisnici definiraju svoje cjevovode u Jenkinsfileu koji opisuje različite faze kao što su izrada, testiranje i postavljanje. Varijable okruženja, opcije, tajni ključevi, certifikati i drugi parametri deklariraju se u datoteci i na njih se upućuje u fazama. Odjeljak posta obrađuje uvjete pogrešaka i obavijesti.  

Sofisticiraniji CD može imati i druge korake poput izvođenja sinkronizacije podataka, arhiviranja informacijskih resursa ili izvođenja zakrpa aplikacija i knjižnica. Alati za CI / CD obično podržavaju tržište dodataka. Na primjer, Jenkins navodi više od 1500 dodataka koji podržavaju integraciju s platformama trećih strana, korisničko sučelje, administraciju, upravljanje izvornim kodom i upravljanje gradnjom.

Nakon odabira alata CI / CD, razvojni timovi moraju osigurati da su sve varijable okruženja konfigurirane izvan aplikacije. CI / CD alati omogućuju postavljanje ovih varijabli, maskiranje varijabli kao što su lozinke i ključevi računa i njihovo konfiguriranje u vrijeme postavljanja za ciljno okruženje.

CD alati također pružaju nadzornu ploču i funkcije izvještavanja. Ako gradnje ili isporuke ne uspiju, upozoravaju razvojne programere informacijama o kvarovima. Integriraju se s kontrolom verzija i agilnim alatima, tako da se mogu koristiti za traženje promjena koda i korisničkih priča koje čine izgradnju.

Implementacija CI / CD cjevovoda s Kubernetesom i arhitekturom bez poslužitelja 

Mnogi timovi koji rade CI / CD cjevovodima u oblaku također koriste spremnike poput Dockera i sustave za orkestraciju poput Kubernetesa. Spremnici omogućuju pakiranje i otpremu na standardne, prijenosne načine. Spremnici olakšavaju skaliranje ili rušenje okruženja s promjenjivim radnim opterećenjem.

Postoje mnogi pristupi zajedničkom korištenju spremnika, infrastrukture kao koda i CI / CD cjevovoda. Opcije možete istražiti radeći kroz vodiče poput Kubernetesa s Jenkinsom ili Kubernetesa s Azure DevOps.

Računalne arhitekture bez poslužitelja predstavljaju još jedan put za postavljanje i skaliranje aplikacija. U okruženju bez poslužitelja, infrastrukturom u potpunosti upravlja davatelj usluga u oblaku, a aplikacija troši resurse prema potrebi na temelju svoje konfiguracije. Na primjer, na AWS-u, aplikacije bez poslužitelja koje se izvode kao Lambda funkcije i implementacije se mogu integrirati u Jenkins CI / CD cjevovod s dodatkom. 

CI / CD omogućuje češće postavljanje koda

Da rezimiramo, CI paketi i testovi izrađuju softver i upozoravaju programere ako njihove promjene nisu uspjele na bilo kojem jediničnom testiranju. CD je automatizacija koja donosi promjene u infrastrukturi i provodi dodatna ispitivanja. 

CI / CD cjevovodi dizajnirani su za tvrtke koje žele često poboljšavati aplikacije i zahtijevaju pouzdan postupak isporuke. Dodatni napor za standardiziranje izrade, razvijanje testova i automatiziranje postavljanja proizvodni je postupak za postavljanje promjena koda. Jednom uspostavljeni, omogućuje timovima da se usredotoče na proces poboljšanja aplikacija, a manje na detalje o sustavu isporuke u računalno okruženje.

CI / CD je najbolja praksa devopsa jer se bavi neusklađenošću programera koji žele često gurati promjene operacijama koje žele stabilne aplikacije. S ugrađenom automatizacijom, programeri mogu češće gurati promjene. Operativni timovi vide veću stabilnost jer okoline imaju standardne konfiguracije, kontinuirano se testira u procesu isporuke, varijable okruženja odvajaju se od aplikacije i postupci vraćanja su automatizirani.

Učinak primjene CI / CD cjevovoda može se mjeriti kao ključni indikator izvedbe devops (KPI). KPI-i, poput učestalosti primjene, vremena izvedbe promjena i srednjeg vremena do oporavka (MTTR) od incidenta, često se poboljšavaju kada se implementiraju CI / CD s kontinuiranim testiranjem. Međutim, CI / CD je samo jedan proces koji može pokrenuti ova poboljšanja, a postoje i drugi preduvjeti za poboljšanje frekvencija implementacije.

Početak rada s CI / CD-om zahtijeva da razvojni i operativni timovi surađuju na tehnologijama, praksama i prioritetima. Timovi moraju razviti konsenzus o pravim pristupima za svoje poslovanje i tehnologije, tako da kada CI / CD bude uspostavljen, tim se ukrcava s dosljednim praksama.