CI/CD Pipeline
CI / CD pipeline představuje sérii kroků, které je nutné provést pro správné dodání nové verze softwaru. CI / CD pipeline mimo jiné také zavádí pravidelné sledování a automatizaci s cílem zlepšit proces vývoje aplikací, a to zejména ve fázích jejich integrace a testování, jakož i během jejich dodání a nasazení. Každý z postupů a kroků, které s sebou CI / CD pipeline přináší, je možné provést manuálně, jejich skutečná hodnota se však realizuje automatizací. Automatizovaná CI / CD pipeline[1] se soustředí na tvorbu kódu aplikace, spouštění testů, bezpečné nasazování nových verzí aplikací do produkce a také je schopná odstranit chyby z kódu, a tím zrychlit iteraci produktů.
Význam CI/CD Pipeline
Mnohé aspekty vývojového procesu softwaru dnes dozrály do stádia, kde je velkou část jejich odpovědnosti a práce schopný převzít kód. Jako příklad je možné uvést témata infrastruktury, jako je integrace a nasazení aplikace, což blíže vysvětluje vzestup metodologie DevOps, v jejímž rámci je dnes CI / CD pipeline hlavní praktikou využívanou mezi softwarovými společnostmi. Proto je v současnosti vrcholový management vztažený na oblast IT nucený tematice CI / CD pipeline porozumět a její praktiky integrovat do chodu organizace. Tímto se organizace dokáže udržet na stejné úrovni s ostatními softwarovými společnostmi, které zásady CI / CD pipeline při vývoji nových produktů také aktivně využívají.
Continuous Integration (CI)
Termín kontinuální integrace (CI) ve spojitosti s IT zavedla společnost ThoughtWorks, která jeho definici formulovala následovně: „Kontinuální integrace (CI) je vývojová praxe, která od vývojáře aplikace vyžaduje integraci kódu do sdíleného úložiště několikrát denně. Každá taková integrace bude ověřena automatizovaným build aplikace, který vývojářským týmům umožní včasné odhalení problémů či chyb v programu.“ [2]
Mnohé IT společnosti vyvíjejí aplikace klasickým způsobem, a to konkrétně sestavením týmu vývojářů, z nichž je každý zodpovědný za samostatný výstup programu aplikace. K tomu, aby byla aplikace připravena na dodání klientovi, je prvotně nutné integrovat její všechny různé funkcionality. Tým vývojářů je díky přístupu CI a jeho časté integraci kódu do společného úložiště schopný odhalit nežádoucí chyby programu dříve, čímž se zároveň výrazně sníží počet zpětných kroků potřebných k nalezení příčiny vzniklých chyb. Celková doba primárně vyčleněna na řešení problémů se proto zřetelně zkrátí.
Postup CI
Kroky nutné k provedení kontinuální integrace (CI) jsou následující:
- Každý vývojář prvotně pracuje na tvorbě kódu lokálně. V ideálním případě se doporučuje vytvoření nové větve pro každou významnou funkci připravované aplikace, která bude v budoucnu implementována.
- V případě, kdy je obsah konkrétní větve připraven k použití, vývojář spustí testování vytvořeného kódu ve svém vývojovém prostředí.
- Po úspěšné realizaci všech testů může být kód vložen do společného úložiště.
- V případě, že ve společném úložišti došlo k úpravám, server CI tyto změny zkontroluje a provede jejich build a následné testování.
- Server CI informuje tým vývojářů o výsledcích testování integrovaného kódu. Tým může získat následující výsledky:
- V případě, že dojde k selhání některé z kontrolovaných částí kódu, je tým vývojářů ihned schopen zahájit práci na řešení problému.
- V opačném případě, kde k žádné chybě nedošlo, vývojář pokračuje v práci a opakuje kroky 2-6 vždy, když se do společného úložiště integroval nový kód.
Continuous Deployment (CD)
Oficiální definice kontinuálního nasazení kódu aplikace je uvedena na webové stránce ThoughtWorks. „Kontinuální nasazení (CD) kódu aplikace úzce souvisí s jeho kontinuální integrací (CI) a týká se uvolnění softwaru, který projde automatizovanými testy do produkce.“ [2]
V situaci, v níž došlo k dodávce jisté části kódu, je nutné nasadit tento kód úspěšně do produkce. Proces tohoto nasazení se často opakuje na stejné bázi postupu. Proto bylo místo manuálního nasazení kódu do produkce zavedené automatické kontinuální nasazení, které předpokládá, že dodaný kód byl úspěšně otestován CI serverem.
Příklad řetězce kroků CI/CD Pipeline
Pro lepší ilustraci postupu, který je využíván při aplikování principů, které sebou přináší CI / CD pipeline je vhodné uvést fiktivní příklad webového softwaru tvořeného v Java prostředí. V praxi by tým vývojářů postupoval následovně:
- Údržba zdrojového kódu: Jako soukromé úložiště (repositář) se doporučuje zvolit host službu, GitHub. Tímto způsobem je možné spojit postupné integrace kódu s hlavním softwarem a jeho službami na vytvoření spouštěčů, které jsou schopny rozpoznat změny v konkrétním soukromém úložišti, jako je například přidání či odstranění jisté části kódu.
- Kontinuální integrace (CI): Pro zajištění kontinuální integrace musí vývojář prvotně získat nástroj CircleCI. Po jeho úspěšném vstupu je nutné tento nástroj napojit na již zmíněný GitHub repositář, což umožní informovat nástroj CircleCI o každé změně kódu, ke které došlo v soukromém repositáři. Po identifikaci změn CircleCI natáhne kód z GitHub úložiště a pokračuje v sestavování a spouštění testů. Samotná kontrola CI funguje na výše uvedeném principu, viz část Continuous Integration. Selhání či naopak úspěchy testů jsou vývojáři zaslány formou e-mail zprávy nebo upozorněním prostřednictvím služby Slack.
- Nasazení uživatelských testů (UAT): Je možné předpokládat, že konkrétní uživatelské testy běží na serveru v AWS ECS. Pro správné nasazení uživatelských testů je vývojář nutný nakonfigurovat nástroj CircleCI tak, aby po úspěšném provedení kontrolních testů byl kód automaticky nasazen na server AWS.
- Nasazení kódu do produkce: Při procesu nasazení úspěšně otestovaného kódu do produkce lze opětovně využít integrační kroky při nasazení UAT uživatelských testů.
Pozitiva CI/CD Pipeline
Využívání praktik CI / CD pipeline může vývoj aplikace či softwaru ovlivňovat několika pozitivními účinky, než je jen zefektivnění oblasti času a automatizace. Mezi další přínosy CI / CD pipeline také patří následující body:
- Tým vývojářů se může nadále soustředit na psaní kódu přičemž pomocí pravidelné kontroly postupných integrací je schopen také sledovat chování kódu v produkci.
- Zúčastněné strany orientující se na oblast kvality vyvíjeného produktu mají snadný přístup ke starší či naopak nejnovější verzi systému.
- Aktualizace produktu nejsou stresující.
- Protokoly o všech provedených změnách, testech a nasazeních kódu jsou kdykoliv k dispozici na případnou zpětnou kontrolu.
Hlavní elementy CI/CD Pipeline
- Build = Fáze, v níž se aplikace sestavuje.
- Test = Fáze, v níž se testuje kód aplikace. Automatizace, kterou s sebou přináší CI / CD pipeline, zde může výrazně ušetřit čas i námahu.
- Release = Fáze, v níž je aplikace doručena do úložiště (repositáře).
- Deploy = V této fázi je kód aplikace nasazen do produkce.
- Validation and Compliance = Kontrola a ověření nasazeného kódu aplikace. Do této fáze je možné zahrnout i interní kontrolu v rámci organizace, která danou aplikaci vyvíjí (např. Zda je aplikace v souladu s jejím stanovenými požadavky).
Reference
- ↑ DHADUK, Hiren. Scalable CI/CD Pipeline Examples: Improve the Development Churn [online]. 2022-07-28 [cit. 2023-05-29]. Dostupné online. (anglicky)
- ↑ a b Continuous integration | ThoughtWorks. www.thoughtworks.com [online]. [cit. 2020-12-19]. Dostupné online. (anglicky)
Externí odkazy
- CI/CD Pipeline: A Gentle Introduction [online] [cit. 2020-12-04]. Dostupné online (anglicky)
- DEVOPS What is a CI/CD pipeline? [online] [cit. 2020-12-07]. Dostupné online (anglicky)
- Understanding the CI/CD Pipeline: What It Is, Why It Matters [online] [cit. 2020-12-08]. Dostupné online (anglicky)
- Deploying to AWS ECR/ECS [online] [cit. 2020-12-11]. Dostupné online (anglicky)