Programovanie

Čo je CI / CD? Je vysvetlená nepretržitá integrácia a nepretržité doručovanie

Nepretržitá integrácia (CI) a nepretržité doručovanie (CD) stelesňujú kultúru, súbor prevádzkových princípov a zbierku postupov, ktoré umožňujú tímom vývoja aplikácií doručovať zmeny kódu častejšie a spoľahlivejšie. Implementácia je tiež známa ako CI / CD potrubie.

CI / CD je jedným z najlepších postupov implementácie vývojových tímov. Je to tiež agilný osvedčený postup metodiky, pretože umožňuje vývojovým tímom softvéru zamerať sa na plnenie obchodných požiadaviek, kvalitu kódu a zabezpečenie, pretože kroky nasadenia sú automatizované.

Definované CI / CD

Nepretržitá integrácia je filozofia kódovania a sada postupov, ktoré vedú vývojové tímy k implementácii malých zmien a častému kontrolovaniu kódu do úložísk správy verzií. Pretože väčšina moderných aplikácií vyžaduje vývoj kódu na rôznych platformách a nástrojoch, tím potrebuje mechanizmus na integráciu a validáciu jeho zmien.

Technickým cieľom CI je ustanoviť konzistentný a automatizovaný spôsob vytvárania, balenia a testovania aplikácií. Vďaka dôslednému zavedeniu integračného procesu je pravdepodobnejšie, že tímy vykonajú zmeny kódu častejšie, čo vedie k lepšej spolupráci a kvalite softvéru.

Priebežné doručovaniepokračuje tam, kde končí kontinuálna integrácia. CD automatizuje dodávku aplikácií do vybraných prostredí infraštruktúry. Väčšina tímov pracuje s rôznymi inými ako produkčnými prostrediami, ako sú vývojové a testovacie prostredia, a CD zaisťuje, že existuje automatizovaný spôsob, ako do nich presúvať zmeny kódu.

Nástroje CI / CD pomáhajú ukladať parametre špecifické pre dané prostredie, ktoré musia byť zabalené pri každej dodávke. Automatizácia CI / CD potom vykoná všetky potrebné servisné volania na webové servery, databázy a ďalšie služby, ktoré bude možno potrebné reštartovať, alebo pri nasadení aplikácií bude treba postupovať podľa iných postupov.

Vyžaduje si nepretržitá integrácia a nepretržité dodávanienepretržité testovaniepretože cieľom je dodávať používateľom kvalitné aplikácie a kód. Kontinuálne testovanie sa často implementuje ako sada automatickej regresie, výkonu a ďalších testov, ktoré sa vykonávajú v potrubí CI / CD.

Vyspelý postup vytvárania sietí CI / CD má možnosť implementácie nepretržitého nasadenia, kde zmeny aplikácií prebiehajú cez potrubie CI / CD a odovzdávanie zostavení sa nasadzuje priamo do produkčných prostredí. Tímy praktizujúce nepretržité doručovanie sa rozhodnú nasadiť do výroby v dennom alebo dokonca hodinovom rozvrhu, hoci nepretržité doručovanie nie je vždy optimálne pre každú obchodnú aplikáciu.

Súvisiace video: Ako rýchlejšie dodať kód pomocou CI / CD

Ako kontinuálna integrácia zlepšuje spoluprácu a kvalitu

Nepretržitá integrácia je filozofia vývoja podložená procesnou mechanikou a určitou automatizáciou. Pri precvičovaní CI vývojári často odovzdávajú svoj kód do úložiska riadenia verzií a väčšina tímov má minimálny štandard na odovzdávanie kódu aspoň každý deň. Dôvodom je to, že je ľahšie identifikovať chyby a iné problémy s kvalitou softvéru na menších rozdieloch v kódoch, ako v tých väčších, ktoré sa vyvinuli počas rozsiahleho časového obdobia. Okrem toho, keď vývojári pracujú na kratších cykloch potvrdenia, je menej pravdepodobné, že viacerí vývojári upravia rovnaký kód a pri potvrdení budú vyžadovať zlúčenie.

Tímy implementujúce nepretržitú integráciu často začínajú konfiguráciou riadenia verzií a definíciami postupov. Aj keď sa kontrola kódu vykonáva často, funkcie a opravy sú implementované v krátkych aj dlhších časových rámcoch. Vývojové tímy praktizujúce nepretržitú integráciu používajú rôzne techniky na riadenie toho, aké funkcie a kód sú pripravené na výrobu.

Mnoho tímov využíva vlajky funkcií, konfiguračný mechanizmus na zapínanie a vypínanie funkcií a kódu za behu. Funkcie, ktoré sú stále vo vývoji, sú zabalené s príznakmi funkcií v kóde, nasadené s hlavnou vetvou do výroby a vypnuté, kým nie sú pripravené na použitie. Podľa nedávneho prieskumu uvádza 63 percent tímov, ktoré používajú príznaky funkcií, lepšie testovanie a vyššiu kvalitu softvéru. Nástroje na nahlasovanie funkcií, ako sú CloudBees Rollout, Optimizely Rollouts a LaunchDarkly, sa integrujú s nástrojmi CI / CD a umožňujú konfigurácie na úrovni funkcií.

Ďalšou technikou správy funkcií jerozvetvenie riadenia verzie. Na definovanie protokolov o tom, ako je nový kód zlúčený do štandardných vetiev pre vývoj, testovanie a výrobu, je zvolená stratégia vetvenia, napríklad Gitflow. Pre tie, ktoré budú trvať dlhšie vývojové cykly, sú vytvorené ďalšie vetvy funkcií. Po dokončení funkcie môžu vývojári zlúčiť zmeny z vetiev funkcií do primárnej vývojovej vetvy. Tento prístup funguje dobre, ale môže byť ťažké ho riadiť, ak bude súčasne vyvíjaných veľa funkcií.

Samotný proces vytvárania sa potom automatizuje zabalením všetkého softvéru, databázy a ďalších komponentov. Napríklad, ak ste vyvíjali aplikáciu Java, CI by zabalil všetky statické súbory webového servera ako HTML, CSS a JavaScript spolu s aplikáciou Java a akýmikoľvek databázovými skriptmi.

CI nielen balí všetky softvérové ​​a databázové komponenty, ale automatizácia vykoná aj jednotkové testy a ďalšie testy. Toto testovanie poskytuje vývojárom spätnú väzbu, že zmeny ich kódu neporušili žiadne existujúce testy jednotiek.

Väčšina nástrojov CI / CD umožňuje vývojárom odštartovať zostavenie na požiadanie, ktoré sa spustí spustením kódu v úložisku správy verzií alebo podľa stanoveného harmonogramu. Tímy musia prediskutovať plán zostavenia, ktorý najlepšie funguje pre veľkosť tímu, počet očakávaných denných záväzkov a ďalšie aspekty týkajúce sa aplikácie. Osvedčený postup na zabezpečenie rýchleho vykonávania a vytvárania, inak by to mohlo brániť postupu tímov, ktoré sa snažia rýchlo kódovať a často sa zaviazať.

Nepretržité testovanie ide nad rámec automatizácie testov

Automatizované testovacie rámce pomáhajú technikom zabezpečujúcim kvalitu definovať, vykonávať a automatizovať rôzne typy testov, ktoré môžu vývojovým tímom pomôcť zistiť, či zostavenie softvéru vyhovuje alebo zlyhá. Zahŕňajú testy funkčnosti vyvinuté na konci každého šprintu a agregované do a regresný test pre celú aplikáciu. Tieto regresné testy potom informujú tím, či zmena kódu zlyhala v jednom alebo viacerých testoch vyvinutých vo všetkých funkčných oblastiach aplikácie, kde existuje testovacie pokrytie.

Osvedčeným postupom je umožniť vývojárom a vyžadovať od nich spustenie všetkých alebo podmnožiny regresných testov v ich miestnych prostrediach. Tento krok zaisťuje, že vývojári odovzdajú kód iba riadeniu verzií po tom, čo regresné testy odovzdajú zmeny kódu.

Regresné testy sú iba začiatkom. Automatizovať sa dá aj testovanie výkonu, testovanie API, analýza statického kódu, testovanie bezpečnosti a ďalšie testovacie formy. Kľúčom je mať schopnosť spúšťať tieto testy buď prostredníctvom príkazového riadku, webhooku alebo webovej služby a reagovať na ne pomocou stavových kódov úspechu alebo zlyhania.

Len čo je testovanie automatizované, neustále testovanie znamená, že automatizácia je integrovaná do potrubia CI / CD. Niektoré testy jednotky a funkčnosti môžu byť integrované do CI, ktoré signalizujú problémy pred alebo počas procesu integrácie. Testy, ktoré vyžadujú kompletné prostredie na doručovanie, ako je testovanie výkonu a zabezpečenia, sú často integrované do CD a vykonávajú sa po doručení zostáv do cieľových prostredí.

Pipeline CD automatizuje zmeny vo viacerých prostrediach

Kontinuálne doručovanie je automatizácia, ktorá posúva aplikácie do doručovacích prostredí. Väčšina vývojových tímov má zvyčajne jedno alebo viac vývojových a testovacích prostredí, v ktorých sa uskutočňujú zmeny aplikácií na účely testovania a kontroly. Na automatizáciu krokov a poskytovanie prehľadov sa používa nástroj CI / CD, ako sú Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo alebo Travis CI.

Typický kanál CD obsahuje fázy budovania, testovania a nasadenia. Sofistikovanejšie plynovody zahŕňajú mnoho z týchto krokov:

  • Vytiahnutie kódu z kontroly verzie a vykonanie zostavenia.
  • Vykonanie všetkých požadovaných krokov infraštruktúry, ktoré sa automatizujú ako kód, aby sa postavila alebo zničila cloudová infraštruktúra.
  • Presun kódu do cieľového výpočtového prostredia.
  • Správa premenných prostredia a ich konfigurácia pre cieľové prostredie.
  • Posunutie komponentov aplikácie do ich príslušných služieb, ako sú webové servery, služby API a databázové služby.
  • Vykonanie všetkých krokov potrebných na reštartovanie služieb alebo na zavolanie koncových bodov služby, ktoré sú potrebné pre nové tlačenia kódu.
  • Vykonávanie nepretržitých testov a prostredí vrátenia zmien, ak testy zlyhajú.
  • Poskytovanie údajov z denníka a upozornení na stav dodávky.

Ako príklad môžu používatelia Jenkins definovať svoje kanály v súbore Jenkins, ktorý popisuje rôzne fázy, ako je zostavovanie, testovanie a nasadenie. Premenné prostredia, možnosti, tajné kľúče, certifikácie a ďalšie parametre sa deklarujú v súbore a potom sa na ne postupne odkazuje. Sekcia príspevku sa zaoberá chybovými stavmi a upozorneniami.

Sofistikovanejšie disky CD môžu mať aj ďalšie kroky, napríklad vykonávanie synchronizácie údajov, archiváciu informačných zdrojov alebo vykonávanie opráv aplikácií a knižníc. Nástroje CI / CD zvyčajne podporujú trh zásuvných modulov. Napríklad Jenkins uvádza viac ako 1 500 doplnkov, ktoré podporujú integráciu s platformami tretích strán, používateľským rozhraním, správou, správou zdrojového kódu a správou zostavenia.

Po výbere nástroja CI / CD sa vývojové tímy musia ubezpečiť, že všetky premenné prostredia sú nakonfigurované mimo aplikácie. Nástroje CI / CD umožňujú nastavenie týchto premenných, maskovanie premenných, ako sú heslá a kľúče účtov, a ich konfigurácia v čase nasadenia pre cieľové prostredie.

Nástroje CD tiež poskytujú funkcie palubnej dosky a vykazovania. Ak zostavy alebo dodávky zlyhajú, upozornia vývojárov informáciami o zlyhaniach. Integrujú sa s riadením verzií a agilnými nástrojmi, takže sa dajú použiť na vyhľadanie toho, aké zmeny kódu a príbehy používateľov tvoria zostavenie.

Implementácia potrubí CI / CD s Kubernetes a bez serverovými architektúrami

Mnoho tímov prevádzkujúcich kanály CI / CD v cloudových prostrediach tiež používa kontajnery, ako je Docker, a orchestračné systémy, ako je Kubernetes. Kontajnery umožňujú štandardné a prenosné spôsoby balenia a prepravy. Kontajnery uľahčujú zväčšovanie alebo búranie prostredí s premenlivým pracovným zaťažením.

Existuje veľa prístupov k spoločnému používaniu kontajnerov, infraštruktúry ako kódu a potrubí CI / CD. Možnosti môžete preskúmať prepracovaním kurzov, ako sú Kubernetes s Jenkinsom alebo Kubernetes s Azure DevOps.

Výpočtové architektúry bez servera predstavujú ďalší spôsob nasadenia a škálovania aplikácií. V prostredí bez servera je infraštruktúra plne spravovaná poskytovateľom cloudových služieb a aplikácia podľa potreby spotrebúva zdroje na základe svojej konfigurácie. Napríklad na AWS môžu byť aplikácie bez servera spustené ako funkcie a nasadenia Lambda integrované do potrubia Jenkins CI / CD s doplnkom.

CI / CD umožňuje častejšie nasadenie kódu

Zrekapitulujme, balíčky CI a testuje zostavenie softvéru a upozorňuje vývojárov, ak ich zmeny zlyhali pri akýchkoľvek testoch jednotiek. CD je automatizácia, ktorá prináša zmeny v infraštruktúre a vykonáva ďalšie testy.

Potrubia CI / CD sú určené pre podniky, ktoré chcú často vylepšovať aplikácie a vyžadujú spoľahlivý proces doručovania. Ďalším úsilím o štandardizáciu zostavení, vývoj testov a automatizáciu nasadenia je výrobný proces nasadenia zmien kódu. Len čo je na mieste, umožňuje tímom sústrediť sa na proces vylepšovania aplikácií a menej na podrobnosti systému, ktorý ich dodáva do výpočtových prostredí.

CI / CD je osvedčeným postupom spoločnosti Devops, pretože sa zameriava na nesúlad medzi vývojármi, ktorí chcú často presúvať zmeny, pomocou operácií, ktoré požadujú stabilné aplikácie. Keď je zavedená automatizácia, vývojári môžu presadzovať zmeny častejšie. Prevádzkové tímy vidia väčšiu stabilitu, pretože prostredia majú štandardné konfigurácie, v procese doručovania je neustále testovanie, premenné prostredia sú oddelené od aplikácie a postupy rollback sú automatizované.

Dopad implementácie potrubí CI / CD možno merať ako devops key performance indikátor (KPI). Keď sa implementujú CI / CD s nepretržitým testovaním, kľúčové ukazovatele výkonu (KPI), ako napríklad frekvencia nasadenia, zmena doby realizácie a stredná doba zotavenia (MTTR) z incidentu, sa často zlepšujú. CI / CD je však iba jedným procesom, ktorý môže viesť k týmto vylepšeniam, a existujú ďalšie predpoklady na zlepšenie frekvencií nasadenia.

Začíname s CI / CD vyžaduje, aby vývojové tímy a operačné tímy spolupracovali na technológiách, postupoch a prioritách. Tímy musia dosiahnuť konsenzus o správnych prístupoch k svojmu podnikaniu a technológiám tak, aby po zavedení CI / CD bol tím zapojený do dôsledného dodržiavania nasledujúcich postupov.

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