Ako robíme CI/CD my?

Ak ste si prečítali článok o výhodách CI/CD, možno vás motivoval nasadiť tieto postupy aj na váš projekt a teraz premýšľate, ako začať. V skratke – na to, aby ste teóriu CI/CD previedli do praxe, potrebujete navrhnúť systém nasadenia nového kódu do produkcie. Tento systém voláme pipeline a pozostáva z jobov, ktoré sa vykonávajú automaticky. Ako ho máme nastavený my na Crossuite?

Aktuálne využívame v rámci CI/CD dva nástroje, a to GitLab a Jenkins. GitLab používame intenzívnejšie a Jenkins by sme postupne radi úplne vynechali, pretože sa ťažko integruje s GITlabom a poskytuje nedostatočný feedback pre developera. 

O tom, ako nastaviť automatizovaný deploy cez GitLab, písal blog môj kolega Šafo, takže ak ho budete využívať, nájdete v ňom skvelý návod.

Samotný proces je rozdelený do dvoch pipelines, pričom v každej je niekoľko jobov, ktoré môžu končiť stavmi failed/success.

Mergovacia pipeline zahŕňa:

  1. Formátovanie kódu – Každý nový kód sa sformátuje podľa nastavených štandardov projektu. Vďaka tomu vzniká v mergi menej zbytočných konfliktov a celkovo sa kód lepšie číta. 
  2. Lintovanie – Cez ESLint sa vykoná statická analýza kódu, opäť podľa best practices a štandardov nastavených pre projekt. Program prebehne celý kód a upozorní na nepoužívané premenné, nevykonávané kódy a podobne. Prípadné nezrovnalosti potom rozdelí na warnings a errors. Upozornenia sú len priateľskými odporúčaniami pre úpravu, no chyby už cez job jednoducho neprejdú a programátor ich musí opraviť.
  3. Build – Tento build je na skúšku a jeho súčasťou je aj:
    1. Minifikácia/Uglifikácia kódu – Aby bol projekt jednoducho menší.
    2. Transpilácia typescriptu do javascriptu – Aby si s funkcionalitou poradil každý browser.
    3. Rozdelenie na chunks – Aby sme mohli dynamicky načítavať javascript počas behu aplikácie.
  4. Testing – V tomto bode spúšťame sériu jednoduchých automatizovaných testov
    1. Jednotkové unit testy – Testujú len jednotlivé funkcie alebo malé časti kódu bez vonkajších závislostí.
    2. Integračné testy – Kontrolujú, ako spolu komponenty v rámci jedného systému (API, FE, microservisa) komunikujú.
    3. Bonus: End-to-end testy – Pri dôležitých mergoch spúšťame v tomto bude aj náročnejšie end-to-end testy, ktoré automatizovane projekt preklikajú.

Ak celá pipeline zasvieti na zeleno, a teda máme success, kód sa úspešne zmerguje a spúšťa sa pipeline 2: deployment. Tá obsahuje všetko, čo migrovacia pipeline, plus nejaké tie drobnosti navyše.  Ak je aj táto pipeline úspešná, aktualizácia sa nasadí “naživo”.

Čo ak ale to, čo nasadíme, ešte nechceme ukázať používateľom? Schováme to pod feature flags! O tých ale budeme písať nabudúce :)

Chceš s nami vyvíjať? Pridaj sa do tímu!