CI/CD je moderný prístup k vývoju softvéru, ktorý spája automatizovanú integráciu kódu, priebežné testovanie a rýchle nasadenie do produkcie. Vývojári tak doručujú nové funkcionality rýchlejšie, bezpečnejšie a s menším rizikom chýb. CI/CD automatizuje všetky kroky od momentu, keď vývojár odošle zmenu do repozitára, až po jej nasadenie do produkčného prostredia. Tímy vďaka tomu reagujú na potreby zákazníkov flexibilne a efektívne.
Čo je CI/CD a prečo je dôležité?
CI/CD predstavuje skratku pre dve anglické slovné spojenia. CI znamená Continuous Integration, CD označuje Continuous Delivery. Ide o súbor praktík, ktorých cieľom je automatizovať vývoj softvéru a uľahčiť aj urýchliť celý pracovný proces.
CI/CD je súčasťou DevOps kultúry, pretože prepája vývojárov, testerov a ďalších odborníkov, čím im umožňuje spolupracovať rýchlejšie a spoľahlivejšie. Vďaka CI/CD sa každá zmena v kóde automaticky integruje, testuje a pripravuje na nasadenie. To výrazne skracuje čas medzi vývojom novej funkcionality a jej dodaním používateľom.
Dôvodov, prečo je CI/CD dôležité, je hneď niekoľko. Medzi tie hlavné patria:
- Rýchlejšie doručovanie nových funkcionalít, pretože automatizácia skracuje čas medzi napísaním kódu a jeho nasadením.
- Vyššia kvalita softvéru, keďže neustále automatizované testovanie odhalí aj drobné chyby, ktoré by neskôr mohli viesť k väčším problémom.
- Menej manuálnej práce a chýb, pretože automatizované procesy znižujú riziko ľudského zlyhania na minimum.
- Lepšia spolupráca tímov. Vývojári, testeri, DevOps špecialisti a ďalší odborníci spolupracujú plynulejšie a efektívnejšie, čo sa prejaví na celom pracovnom procese.
- Stabilnejšie aplikácie, lebo častejšie, menšie a bezpečnejšie vydania softvéru znamenajú menej výpadkov a chýb.
- Vyššia konkurencieschopnosť na trhu. Firmy dokážu vďaka CI/CD rýchlejšie reagovať na potreby zákazníkov a zmeny na trhu, čo je v IT oblasti kľúčové.
Čo je continuous integration (CI)?
Pýtaš sa, čo znamená continuous integration a ako funguje tento typ integrácie? Celý proces je pomerne jednoduchý na vysvetlenie a pochopí ho aj začiatočník, ktorý nemá s IT oblasťou veľa skúseností.
Continuous integration (CI) do slovenčiny prekladáme ako kontinuálna integrácia. Už samotný názov naznačuje, že ide o spôsob práce, pri ktorom vývojári pravidelne integrujú nové alebo opravené časti kódu do spoločného Git repozitára, kde sa následne aj testujú. Jednotlivé zmeny sú vďaka tomu menšie, rovnako ako prípadné chyby či komplikácie. Tie sa potom opravujú oveľa jednoduchšie, než keby sa celý kód napísal naraz a testoval až na konci.
CI je základným pilierom CI/CD a jeho cieľom je udržiavať kód stabilný, kvalitný a neustále pripravený na ďalší krok. Zároveň pomáha minimalizovať riziko vzniku chýb, ktoré by sa inak mohli prejaviť až v neskorších fázach vývoja.
Ako funguje CI v praxi?
V praxi CI funguje tak, že vývojári integrujú zmeny v kóde do repozitára niekoľkokrát denne. Nečakajú pritom na koniec dňa, týždňa ani iného časového obdobia. Po tom, ako sa zmena objaví na serveri, sa automaticky spúšťa testovanie, analýza kvality kódu a ďalšie kontroly. Tie zabezpečujú, že je všetko v poriadku a tím môže bez problémov pokračovať v práci.
Ak sa objavia chyby, vývojár na nich môže začať pracovať okamžite. Vďaka tomu sa proces zbytočne nekomplikuje, skracuje sa čas dodania a šetria sa náklady.
Continuous delivery vs. continuous deployment – v čom je rozdiel?
Po CI nasleduje CD, teda continuous delivery (priebežné dodávanie). Niektorí si ho mýlia s continuous deployment, ktoré označuje priebežné nasadzovanie. Hoci tieto dva pojmy znejú veľmi podobne, existuje medzi nimi niekoľko rozdielov. Rozdiel medzi continuous delivery a deployment je najmä z pohľadu toho, kto (alebo čo) rozhoduje o finálnom nasadení kódu do produkcie.
Continuous delivery
Continuous delivery znamená, že po tom, ako sa do repozitára dostane zmena, sa okamžite otestuje a pripraví na nasadenie do produkcie. Všetky kroky sú automatizované, okrem posledného, ktorým je finálne nasadenie. To musí vývojár alebo release manager vykonať manuálne.
Výhodou continuous delivery je, že uľahčuje celý proces práce a skracuje čas doručenia softvéru alebo aplikácie. Zároveň ti však ponecháva kontrolu nad tým, kedy kód prejde do produkcie. Tento prístup je vhodný najmä pre tímy, ktoré pracujú v regulovaných odvetviach alebo potrebujú manuálnu kontrolu pred každým vydaním.
Continuous deployment
Ako už možno tušíš, continuous deployment posúva automatizáciu o krok ďalej. Okrem testovania a prípravy nového kódu ho automaticky nasadzuje priamo do produkcie, a to bez nutnosti manuálneho zásahu. Aplikácia alebo iný softvér tak môže byť pravidelne aktualizovaný, pričom si to ani nemusíš všimnúť.
Pre continuous deployment by sa mali rozhodnúť tímy, ktoré potrebujú ušetriť čo najviac času a energie a usilujú sa o maximálnu produktivitu. Je však dobré nespoliehať sa na automatizáciu stopercentne. Softvér je potrebné z času na čas skontrolovať, aby bolo isté, že všetko funguje správne. Mnohé tímy kombinujú continuous deployment s feature flagmi, ktoré umožňujú aktivovať novú funkciu pre používateľov až v správnom čase.
CI/CD pipeline: 7 krokov od commitu po produkciu
Moderná CI/CD pipeline pozostáva z viacerých navzájom prepojených krokov. Každá zmena v kóde tak prejde kontrolovaným, automatizovaným a opakovateľným procesom. Celá pipeline slúži ako štandardizovaná „diaľnica” pre kód od vývojára k používateľovi.
Pozri sa detailnejšie na jednotlivé kroky.
1. Commit (zaznamenanie zmeny)
Tento krok iniciuje celý proces CI/CD. V praxi ide o uloženie nového kódu alebo opravu existujúceho. Inými slovami, ide o vykonanie a zaznamenanie zmeny v Git repozitári. Niektorí vývojári ešte pred samotným commitom alebo počas neho používajú takzvané pre-commit kontroly, ktoré automaticky validujú časť kódu. Ich úlohou je najmä:
- skontrolovať syntaktické chyby,
- spustiť lintery (kontrolu štýlu kódu),
- spustiť statickú analýzu kódu,
- overiť zraniteľnosti kódu,
- skontrolovať formátovanie,
- zablokovať commit, ak kód neprejde kontrolami.
Pre-commit kontroly fungujú ako filter, ktorý zabraňuje odoslaniu commitu s chybami. Tie by mohli viesť k rôznym problémom. Vďaka nim získaš rýchlejšiu spätnú väzbu a v CI/CD pipeline sa objaví menej chýb.
Vráťme sa však späť ku commitu. Ten by mal byť dobre premyslený a štruktúrovaný, aby boli zmeny v kóde jasne zdokumentované a ľahko sledovateľné. Vďaka tomu môžeš viesť presnú históriu aktualizácií, čo je dôležité nielen pre teba ako autora zmien, ale aj pre ostatných členov tímu.
Menšie zmeny a častejšie commitovanie sú základom plynulého fungovania CI/CD. Znižuješ tak pravdepodobnosť konfliktov a chýb v ďalších fázach pipeline.
2. Source (zdrojový kód)
Po prvom kroku nasleduje načítanie zdrojového kódu z repozitára a jeho príprava na spracovanie. Systém overuje, či je konfigurácia projektu kompletná a či má k dispozícii všetky potrebné súbory, aby sa mohol pripraviť na ďalšie kroky procesu.
V tejto fáze sa rieši aj to, v ktorej vetve sa tvoja zmena nachádza. Môže ísť o produkčný alebo integračný kód, nový vývoj alebo rýchlu opravu. Zároveň platí, že čím menej vetiev projekt používa, tým rýchlejšie je možné ich integrovať do hlavnej vetvy. To automaticky znamená plynulejší proces práce bez zbytočných komplikácií.
Pre lepšiu predstavu: ak vývojári pracujú s dlhodobými alebo početnými vetvami, kód sa vyvíja izolovane. Pri spájaní vznikajú konflikty a integrácia zmien je celkovo náročnejšia a komplikovanejšia.
Viaceré výskumy, napríklad DORA reporty, ukazujú, že najlepšie IT tímy:
- majú len niekoľko aktívnych vetiev,
- integrujú zmeny každý deň alebo ešte častejšie,
- vyhýbajú sa veľkým zlúčeniam, ktoré vedú k častým konfliktom.
DORA metriky ako deployment frequency a mean time to recovery (MTTR) sú dnes priemyselným štandardom na meranie kvality CI/CD procesu.
3. Build (stavanie aplikácie)
V tomto kroku sa kód zostavuje do nasaditeľných artefaktov. Môžu nimi byť knižnice, kontajnery alebo binárne súbory. Softvér a aplikácie zároveň potrebujú rôzne knižnice alebo balíčky, ktoré build fáza automaticky stiahne a zahrnie. Pre JavaScript sa najčastejšie používajú nástroje npm, pnpm alebo yarn, pre Javu zas Maven alebo Gradle.
Pri modernom vývoji sa kód často balí do takzvaného Docker image, ktorý spravidla obsahuje aplikáciu, potrebné knižnice, konfiguráciu, runtime aj základ operačného systému. Docker image je zároveň základom aj pre orchestráciu cez Kubernetes, ktorý v moderných CI/CD pipeline spravuje nasadzovanie kontajnerov do produkcie.
Súčasťou tohto kroku bývajú aj rýchle kontroly, ktorých cieľom je odhaliť prípadné chyby v syntaxi, formátovaní a podobne. Ak tieto kontroly neodhalia žiadne problémy, kód je pripravený na ďalší krok pipeline.
Docker image využíva veľké množstvo vývojárov, pretože zabezpečuje rovnaké správanie aplikácie v každom prostredí: od lokálneho developer PC cez staging až po produkciu.
4. Artifact repository (repozitár artefaktov)
Artifact repository je úložisko, do ktorého sa ukladajú všetky výsledky buildu. Ide o hotové artefakty, ktoré vzniknú zo zdrojového kódu. Artefaktami môžu byť napríklad:
- knižnice,
- balíčky,
- Docker image,
- spustiteľné súbory vo formátoch .exe, .jar, .war a podobne,
- konfiguračné balíčky,
- skripty.
Ukladanie artefaktov do repozitára je dôležité najmä preto, aby boli všetky výstupy z buildu na jednom mieste, ku ktorému má prístup celý tím. Zároveň umožňuje ukladať jednotlivé verzie buildu, ku ktorým sa môžeš kedykoľvek vrátiť. Táto funkcia rollbacku je v poisťovníckom prostredí kritická, lebo umožňuje rýchly návrat k predchádzajúcej verzii, ak sa v produkcii objaví neočakávaný problém.
Netreba zabúdať ani na to, že ak sú všetky buildy uložené na jednom mieste, deploy fáza ich dokáže jednoducho získať a nasadiť do rôznych prostredí.
5. Test (automatické testovanie)
Aj napriek tomu, že v predchádzajúcich krokoch prebiehajú menšie kontroly a testy, je potrebné vykonať hĺbkovú kontrolu, ktorá potvrdí, že je všetko v poriadku a kód je správny, stabilný a bezpečný.
Testy prebiehajú automaticky, takže do procesu nemusíš manuálne zasahovať. Systém zvyčajne spúšťa viacero typov testov, medzi ktoré patria:
- Unit testy testujú malé časti kódu izolovane.
- Integračné testy overujú, či jednotlivé moduly alebo komponenty správne spolupracujú.
- Funkčné testy zisťujú, či aplikácia funguje tak, ako má.
Ak chceš ísť do hĺbky v téme automatizovaného testovania, pozri si aj naše články o testovaní na msgtester.sk. Moderné testovacie prístupy využívajú aj machine learning na detekciu anomálií v správaní aplikácie počas testov.
6. Acceptance test (akceptačné testovanie)
Po klasickom testovaní nasleduje akceptačné testovanie, pri ktorom sa overuje, či aplikácia:
- spĺňa funkčné požiadavky,
- zodpovedá požiadavkám klienta,
- funguje správne aj z pohľadu koncového používateľa,
- je pripravená na reálne používanie.
V tomto kroku sa využívajú najmä tieto typy testov:
- End-to-end testy (E2E) simulujú reálne používanie aplikácie.
- UI testy overujú, že používateľské rozhranie (tlačidlá, vyskakovacie okná, formuláre a podobne) funguje a reaguje tak, ako má.
- Behavior-driven development testy (BDD) potvrdzujú, že aplikácia sa správa v súlade s očakávaniami klienta.
- Load a performance testy zisťujú, či aplikácia zvláda očakávanú záťaž.
7. Deploy (nasadenie)
Deploy je finálny krok, v ktorom sa aplikácia presúva do cieľového prostredia. Spôsob nasadenia závisí od nastavenia tímu a zvoleného prístupu. Vývojári majú na výber dve možnosti, ktoré sme spomínali už vyššie:
- Continuous delivery: kód je pripravený na nasadenie, no jeho spustenie musí manuálne schváliť človek.
- Continuous deployment: po splnení všetkých podmienok sa kód automaticky nasadzuje priamo do produkcie.
Pokročilé tímy využívajú aj stratégie ako blue-green deployment alebo canary release, ktoré umožňujú postupné nasadenie novej verzie len pre časť používateľov a minimalizujú riziko širokého výpadku.
Výhody CI/CD pre firmy a vývojárov
CI/CD má množstvo výhod pre firmy aj vývojárov. Medzi tie hlavné patria:
- kratšie cykly vydávania softvéru a tým aj častejšie uvádzanie nových verzií do prevádzky,
- možnosť rýchleho odstraňovania chýb ešte predtým, než sa dostanú k používateľom,
- neustále zlepšovanie a zabezpečovanie kvality softvéru,
- minimalizácia rizík pri vydávaní verzií (z pohľadu termínov, kvality, rozpočtu, migrácií a podobne),
- menej manuálnych procesov, pričom manuálne testovanie môže prebiehať paralelne s automatizáciou,
- nepretržitá a rýchla spätná väzba, ktorá umožňuje okamžité riešenie problémov,
- možnosť pokračovať vo vývoji bez prerušenia počas dodávania nových verzií,
- nižšie náklady vďaka plne automatizovanému procesu.
Firmy, ktoré adoptovali CI/CD, často reportujú skrátenie release cyklov z týždňov na dni alebo dokonca hodiny. Spolu s tým klesá aj počet kritických chýb v produkcii, čo priamo ovplyvňuje spokojnosť zákazníkov aj náklady na podporu.
Najlepšie CI/CD nástroje: Jenkins, GitLab a ďalšie
Na to, aby si mohol CI/CD efektívne využívať, potrebuješ spoľahlivé a overené nástroje, ktoré budeš používať na pravidelnej báze. Niektoré z nich sú určené priamo na CI alebo CD, iné sa zameriavajú na špecifické úlohy, ako je riadenie vývoja či priebežné testovanie.
Mnohé z týchto nástrojov sú open-source, čo znamená, že ich môžeš používať bezplatne. Vďaka tomu si ich môžeš vyskúšať a zistiť, ktoré ti vyhovujú najviac. K dispozícii sú však aj platené riešenia, ktoré zvyčajne ponúkajú niekoľkodňové skúšobné verzie. Niektoré z nich fungujú ako SaaS služby v cloude, čo znamená, že nemusíš nič inštalovať ani udržiavať lokálne.
Medzi najpopulárnejšie CI/CD nástroje patria:
- Jenkins: Jeden z najrozšírenejších nástrojov na CI. Keďže ide o open-source riešenie, je dostupný zadarmo a ponúka vysokú mieru flexibility. To ocenia jednotlivci aj firmy, ktoré si ho môžu prispôsobiť presne podľa svojich potrieb. Jenkins má rozsiahlu komunitu a tisíce pluginov.
- GitLab CI/CD: Praktické riešenie umožňujúce spúšťanie testov a nasadzovanie nového kódu priamo z GitLab repozitára. Vývojári ho obľubujú najmä pre jeho jednoduchosť, YAML konfiguráciu a natívnu podporu DevOps praktík.
- GitHub Actions: Nástroj integrovaný priamo do GitHubu, ktorý slúži na automatizáciu CI/CD pipeline, správy chýb a mnohých ďalších procesov. Jeho výhodou je jednoduché používanie a rozsiahla knižnica hotových šablón, napríklad na nasadzovanie aplikácií či bezpečnostné kontroly.
- CircleCI: Cloudová platforma využívaná najmä tímami pracujúcimi na väčších a náročnejších projektoch. Je ideálna pre tých, ktorí kladú dôraz na rýchlosť a flexibilitu.
- Docker: Hoci nejde o klasický CI/CD nástroj, zohráva dôležitú úlohu pri vytváraní konzistentných prostredí, v ktorých aplikácie fungujú rovnako vo všetkých fázach vývoja.
Okrem vymenovaných riešení sa v moderných pipeline často stretneš aj s Azure DevOps, TeamCity či Bitbucket Pipelines. Výber nástroja závisí od toho, kde máš kód uložený, aký veľký je tím a aké integrácie potrebuješ.
CI/CD v poisťovníctve
V poisťovníctve zohráva CI/CD kľúčovú úlohu. Ide o sektor s mimoriadne komplexnými systémami, prísnymi legislatívnymi požiadavkami a neustálym tlakom na rýchle reagovanie na zmeny trhu. Poisťovne pracujú s veľkým objemom dát, zložitými procesmi a produktmi, ktoré je potrebné pravidelne aktualizovať, či už kvôli reguláciám, konkurencii alebo interným inováciám. CI/CD prináša do tohto prostredia stabilitu, rýchlosť a automatizáciu, ktoré sú pri rozsiahlych systémových zmenách nevyhnutné.
Digitalizácia poisťovníctva kladie na IT tímy čoraz vyššie nároky. Zákazníci očakávajú rýchle uzatváranie zmlúv online, transparentné spracovanie škodových udalostí a moderné mobilné aplikácie. Bez CI/CD by bolo takmer nemožné dodávať tieto zmeny v takej rýchlosti a kvalite, akú dnešný trh vyžaduje. Data-driven rozhodovanie sa navyše opiera o spoľahlivé dátové pipeline, ktoré data science tímy potrebujú na kontinuálnu analýzu a modelovanie.
Ako msg life využíva CI/CD v praxi
V msg life využívame CI/CD na priebežnú integráciu a dodávanie zmien v rámci msg.Insurance Suite. Ide o komplexné softvérové riešenie pre správu poistných produktov. Keďže poisťovacie procesy zahŕňajú výpočty poistného, správu zmlúv, spracovanie poistných udalostí či generovanie regulovaných dokumentov, je nevyhnutné, aby bola každá zmena v systéme dôkladne otestovaná vo všetkých fázach CI/CD pipeline. Automatizované testy overujú logiku, legislatívne pravidlá aj správnosť procesov, zatiaľ čo continuous delivery umožňuje rýchle a spoľahlivé nasadzovanie aktualizácií pre klientov.
Agilný vývoj softvéru má v msg life vysokú prioritu. Preto je samozrejmosťou využívanie continuous integration a continuous delivery pri vývoji a dodávaní softvérových verzií. Softvérová aplikácia je rozdelená do viacerých menších zavádzacích jednotiek, napríklad Docker containerov, z ktorých každý predstavuje samostatnú odbornú funkciu a môže byť nasadený nezávisle.
Použitie Docker containerov umožňuje elegantne implementovať stratégiu immutable deployment (stratégia nemeniteľného nasadenia), ktorej cieľom je používať rovnaké nasadenie vo všetkých fázach vývoja a už vopred eliminovať možné problémy.
Nasadzovací systém (deployment pipeline), ktorý zahŕňa všetky fázy spracovania a overovania softvéru až po jeho vydanie, je plne automatizovaný. Zabezpečuje, aby sa zmeny vykonané vývojármi dostali ku koncovým používateľom presne podľa plánu: čo najrýchlejšie a vo vysokej kvalite. Každá zmena je pritom priamo integrovaná do celého systému.
