Škálování a optimalizace CI/CD

Výzvy a řešení škálování a optimalizace CI/CD

Zavádění pracovních postupů CI/CD při vývoji aplikací nabývá na popularitě. Nicméně, zvětšování rozsahu a zdokonalování CI/CD procesů představuje nemalou překážku.

V tomto článku se podíváme na to, co přesně tyto obtíže obnášejí a jak můžeme CI/CD efektivně škálovat a optimalizovat. Pojďme na to!

V současnosti je vývoj aplikací typicky realizován v týmech, které se skládají z několika programátorů. Každý člen, nebo skupina, má svou úlohu v rámci projektu a pracuje na přidělené části.

Na závěr projektu se tak setkáváme s mnoha kusy kódu, které je potřeba sloučit. V závislosti na přístupu jednotlivých vývojářů může správa této integrace zabrat značné množství času.

CI/CD (průběžná integrace a průběžné doručování/nasazování) představuje řešení tohoto problému a zajišťuje plynulé vydávání aktualizací bez zbytečných prodlev a konfliktů. Nyní si tento proces detailněji rozebereme.

Průběžná integrace

CI neboli Continuous Integration zahrnuje procesy, které se zaměřují na neustálé začleňování změn kódu a doplňků do sdílené větve projektu. Tato praxe umožňuje testovat kód a provádět vylepšení a úpravy v reálném čase. Hlavním cílem je otestovat každý prvek pomocí automatizovaných testů.

Tento permanentní přístup zabraňuje situacím, kdy se vše kontroluje až na konci najednou, a tím se předchází situacím, kdy se pracuje na příliš mnoha prvcích současně. Pro zajištění kvality jsou velice užitečné takzvané jednotkové testy. Díky nim je snazší odhalit případné chyby, zajistit, aby se kód bez problémů kompiloval, a vyhnout se regresím.

Průběžné doručování

Průběžné doručování (Continuous Delivery), označované jako CD, navazuje na průběžnou integraci a testování a umožňuje zabalit tyto komponenty do kontejnerů a připravit k uvedení do provozu. Konkrétně se jedná o shromažďování kódů a provedených testů a jejich automatizované nasazování do produkčního prostředí.

I když tento proces vyžaduje určitou míru lidské interakce, automatizuje „vysílání“ všeho, co bylo provedeno, do integrovaného a komplexního celku. Zjednodušeně řečeno, díky průběžnému doručování je naše aplikace kdykoliv připravena k nasazení do produkčního prostředí.

Průběžné nasazení

Ačkoli se koncepty průběžného doručování a průběžného nasazování podobají, existují mezi nimi odlišnosti. Cíl je sice stejný, tedy nasazení aplikace do produkce, ale prostředky k jeho dosažení se liší. Klíčovým rozdílem mezi průběžným doručováním a průběžným nasazováním je fáze uvolnění.

Průběžné nasazování umožňuje přímé nasazení každé změny, která úspěšně projde všemi fázemi našeho pipeline. Naopak v případě průběžného doručování je nutný lidský zásah pro schválení nasazení.

Škálování CI/CD

S narůstajícím počtem mikroslužeb se škálování CI/CD stává nevyhnutelností. Větší množství mikroslužeb vede k rozličným kanálům napojeným na jediné Git úložiště, což zatěžuje CI server a snižuje jeho výkon.

Pro účinné škálování CI/CD je klíčové vytvořit standardizovaný a automatizovaný vývojový proces pro všechny týmy. To pomáhá zajistit kvalitu individuálních i týmových výstupů a zjednodušuje správu samotného pipeline.

Škálování lze realizovat definováním CI procesu pro provádění jednotkových testů a ověřování kvality dodaného kódu.

Dále je nutné definovat proces vytváření obrazů pro CD a jejich průběžné nasazování do testovacích prostředí a nakonec proces vytváření obrazů a jejich implementace do produkčního prostředí.

Kroky pro škálování CI/CD

Prvním krokem je koordinace pipeline s architekty, včetně vedoucích týmů. Poté následuje mapování Git větví do prostředí (vývoj -> vývoj a master -> [homologace a produkce]). Následně dochází ke spouštění CI úloh při každém požadavku na sloučení (Pull Request) a CD úloh při každé změně v mapovaných větvích.

Pro sledování CI i CD je možné vytvořit tok úloh.

CI Job Flow se skládá ze 7 kroků:

  • Zjištění zdrojové a cílové větve Pull Request;
  • Kontrola, zda sloučení nevyžaduje ruční zásah kvůli konfliktům;
  • Spuštění jednotkových testů;
  • Sestavení balíčku pro ověření integrity a kompilovatelnosti kódu;
  • Ověření kvality spouštěcího kódu;
  • Navýšení a odevzdání verze projektu do zdrojové větve;
  • Informování Git repozitáře o úspěchu nebo selhání prostřednictvím Webhooku nebo volání Rest API.

Postup CD úlohy vypadá následovně:

  • Notifikovaná větev je odhlášena.
  • Je vytvořen artefakt pomocí specifického nástroje pro sestavení daného projektu.
  • Po vytvoření artefaktu jsou projekty knihovny odeslány do Nexus pro uložení a tok je dokončen.

Následně se provádějí tyto kroky:

Krok 1: Vytvoří se Docker obraz pro vygenerovaný artefakt a na Docker obraz se aplikuje verze artefaktu.

Krok 2: Obraz se nahraje do Docker registru.

Krok 3: Nasazení probíhá přes Kubernetes.

U aplikací v prostředí schvalování/produkce se postupuje podle kroků 1 a 2 výše a poté se postupuje následovně:

  • Nasazení obrazu přes Kubernetes v testovacím prostředí;
  • Úloha se pozastaví a čeká na schválení zavedení pro produkci;
  • V případě schválení se image propaguje do produkce;
  • V opačném případě se image vrátí ke schválení.

Optimalizace CI/CD

CI/CD zefektivňuje vývojový cyklus aplikací a řeší problémy spojené s integrací nového kódu a zvýšením frekvence dodávek.

Níže uvádíme několik způsobů, jak můžete dále optimalizovat využití CI/CD:

Prioritizujte opravu poškozeného sestavení

Pokud dojde k poškození sestavení, měla by být jeho oprava prioritou pro celý tým. V případě, že sestavení nelze opravit v krátkém čase, je nutné rozhodnout, zda odstranit kód nebo deaktivovat funkcionalitu.

Cílem je, aby sestavení vždy vytvářelo funkční kód, který je připraven k nasazení.

Časté a menší nasazení

Při každém nasazení je obecně ohrožena stabilita aplikace. Z toho důvodu máme tendenci nasazení oddalovat. Problém je, že tím hromadíme příliš mnoho změn. Pokud jedna z těchto změn neprojde, musíme vracet i ty, které fungovaly.

Doporučujeme rozdělit složité změny na menší a jednodušší. Častější nasazování v menších dávkách snižuje riziko.

Automatizujte QA testy pro snížení rizik

Všichni se asi setkali s hláškou „na mém počítači to funguje“, protože lokální vývojová prostředí se často liší od těch, která se používají v produkci. Mezi vaším lokálním prostředím a prostředím, kam nasazujete, může existovat mnoho rozdílů. CI/CD můžete optimalizovat automatizací QA testů, jako je testování prohlížeče. Tím se sníží riziko, že se chyba dostane do živé aplikace.

Důvěřujte automatickým testům

Pro ověření, zda vývojář správně integruje nový kód, se CI spoléhá na automatizované a spolehlivé testovací sady. Prvním testem je vždy, zda se kód dokáže zkompilovat. Následně můžete přidat tolik testů, kolik považujete za nezbytné.

Kolik testů by se mělo používat? Hlavním cílem CI je poskytnout zpětnou vazbu co nejrychleji. Pokud bude vývojář čekat na zpětnou vazbu hodinu, systém nebude fungovat efektivně. Vždy se může něco přehlédnout, ale pokud se objeví chyba v produkci, vytvořte testovací případ a zahrňte ho do CI smyčky.

Nezapomínejte na bezpečnost

Nezapomínejte na zabezpečení CI/CD nástrojů, protože jsou integrovány do stávajících konfigurací nebo prostředí. CI/CD vyžaduje, aby byly veškeré nástroje pro testování zabezpečení volány programově a aby jejich výsledky byly agregovány na jednom místě. Hledejte nástroje, které disponují API pro automatické šifrování auditů.

Výhody škálování a optimalizace CI/CD

Kromě zvýšení efektivity vývojových týmů, škálování a optimalizace CI/CD přináší i další výhody, mezi které patří:

Snížené režijní náklady

Vývojový čas bývá obvykle účtován, ale co čas strávený ručním nasazováním kódu nebo souborů? Automatizace velkých částí vašeho procesu ušetří čas, který můžete využít na fakturovatelnou práci. Automatizované testování také umožňuje odhalit chyby dříve, než se objeví v QA nebo v produkci, nebo v nejhorším případě, než je objeví zákazník. Více opravených chyb za stejnou dobu je velký přínos.

Dodávka s menším počtem chyb a nižším rizikem

Chyby se zachytí mnohem dříve ve vývojovém procesu, pokud se drobné změny vydávají častěji. Pokud implementujete automatizované testy ve všech fázích vývoje, riskujete, že se kód s chybami dostane do další fáze. A v případě potřeby je jednodušší vrátit zpět jen drobné změny.

Rychlejší reakce na změny na trhu

Podmínky na trhu se neustále mění. Představte si, že zjistíte, že nový produkt přináší nižší zisk, nebo že na váš web přistupuje více zákazníků ze smartphonů než z notebooků. Pokud máte optimalizované průběžné doručování, můžete tyto změny provést mnohem rychleji.

Důvěra

Pokud máte optimalizované CI/CD, což znamená, že máte spolehlivou testovací sadu, vaše důvěra, že nenasadíte chybu, se výrazně zvýší. Pokud budete transparentní ve svém procesu a budete vzdělávat ostatní členy týmu a zákazníky, zvýší se také jejich důvěra ve váš vývojový tým.

Závěrečná slova

CI/CD urychlí vaše integrace a dodávky. Je však důležité CI/CD škálovat a optimalizovat, aby se proces nestal kontraproduktivním kvůli rostoucí komplexitě.

Můžete se také podívat na některé z nejlepších nástrojů CI.