Programování

Co je CI / CD? Kontinuální integrace a nepřetržité doručování vysvětleny

Kontinuální integrace (CI) a kontinuální doručování (CD) ztělesňují kulturu, sadu provozních principů a kolekci postupů, které umožňují týmům vývoje aplikací doručovat změny kódu častěji a spolehlivěji. Implementace je také známá jako CI / CD potrubí.

CI / CD je jedním z nejlepších postupů implementace vývojových týmů. Je to také agilní osvědčený postup metodiky, protože umožňuje týmům vývoje softwaru zaměřit se na splnění obchodních požadavků, kvalitu kódu a zabezpečení, protože kroky nasazení jsou automatizované.

Definováno CI / CD

Kontinuální integrace je filozofie kódování a sada postupů, které řídí vývojové týmy k implementaci malých změn a častému odbavování kódu do úložišť správy verzí. Protože většina moderních aplikací vyžaduje vývoj kódu na různých platformách a nástrojích, tým potřebuje mechanismus pro integraci a ověření jeho změn.

Technickým cílem CI je vytvořit konzistentní a automatizovaný způsob vytváření, balení a testování aplikací. Díky jednotnému procesu integrace je pravděpodobnější, že týmy provádějí změny kódu častěji, což vede k lepší spolupráci a kvalitě softwaru.

Kontinuální dodávkapokračuje tam, kde končí nepřetržitá integrace. CD automatizuje doručování aplikací do vybraných infrastrukturních prostředí. Většina týmů pracuje s více prostředími, než je produkční, jako jsou vývojová a testovací prostředí, a CD zajišťuje, že existuje automatizovaný způsob, jak do nich zasílat změny kódu.

Nástroje CI / CD pomáhají ukládat parametry specifické pro prostředí, které musí být zabaleny s každou dodávkou. Automatizace CI / CD poté provede veškerá nezbytná volání služeb na webové servery, databáze a další služby, které bude pravděpodobně nutné restartovat, nebo bude při nasazení aplikací postupovat podle dalších postupů.

Nepřetržitá integrace a nepřetržité doručování vyžadujíprůběžné testováníprotože cílem je dodávat uživatelům kvalitní aplikace a kód. Kontinuální testování se často implementuje jako sada automatizované regrese, výkonu a dalších testů, které se provádějí v kanálu CI / CD.

Vyspělá praxe CI / CD devops má možnost implementace nepřetržitého nasazení, kde změny aplikací probíhají prostřednictvím kanálu CI / CD a předávání sestavení jsou nasazeny přímo do produkčních prostředí. Týmy praktikující nepřetržité doručování se rozhodnou nasadit do výroby v denním nebo dokonce hodinovém rozvrhu, i když nepřetržité doručování není vždy optimální pro každou obchodní aplikaci.

Související video: Jak rychleji dodávat kód pomocí CI / CD

Jak kontinuální integrace zlepšuje spolupráci a kvalitu

Kontinuální integrace je vývojová filozofie podporovaná procesní mechanikou a určitou automatizací. Při procvičování CI vývojáři často zadávají svůj kód do úložiště správy verzí a většina týmů má minimální standard zavádění kódu alespoň denně. Důvodem je to, že je snazší identifikovat vady a další problémy s kvalitou softwaru u menších kódových rozdílů než u větších, které byly vyvinuty po dlouhou dobu. Kromě toho, když vývojáři pracují na kratších cyklech potvrzení, je méně pravděpodobné, že více vývojářů bude upravovat stejný kód a bude při provádění vyžadovat sloučení.

Týmy provádějící nepřetržitou integraci často začínají konfigurací řízení verzí a definicemi praxe. I když se kontrola kódu provádí často, funkce a opravy jsou implementovány v krátkých i delších časových rámcích. Vývojové týmy procvičující nepřetržitou integraci používají různé techniky k řízení, jaké funkce a kód jsou připraveny k produkci.

Mnoho týmů používá příznaky funkcí, konfigurační mechanismus pro zapnutí a vypnutí funkcí a kódu za běhu. Funkce, které jsou stále ve vývoji, jsou zabaleny s příznaky funkcí v kódu, nasazeny s hlavní větví do výroby a vypnuty, dokud nejsou připraveny k použití. Podle nedávného průzkumu uvádí 63 procent týmů, které používají příznaky funkcí, lepší testování a vyšší kvalitu softwaru. Nástroje pro označování funkcí, jako je CloudBees Rollout, Optimizely Rollouts a LaunchDarkly, se integrují s nástroji CI / CD a umožňují konfigurace na úrovni funkcí.

Další technikou pro správu funkcí jevětvení řízení verzí. Je vybrána strategie větvení, jako je Gitflow, která definuje protokoly o tom, jak je nový kód sloučen do standardních větví pro vývoj, testování a produkci. Jsou vytvořeny další větve funkcí pro ty, které budou trvat delší vývojové cykly. Po dokončení funkce mohou vývojáři sloučit změny z větví funkcí do primární vývojové větve. Tento přístup funguje dobře, ale může být obtížné jej spravovat, pokud existuje mnoho funkcí vyvíjených současně.

Samotný proces sestavení je poté automatizován zabalením veškerého softwaru, databáze a dalších komponent. Například pokud vyvíjíte aplikaci Java, CI by zabalil všechny statické soubory webového serveru, jako jsou HTML, CSS a JavaScript, spolu s aplikací Java a jakýmikoli databázovými skripty.

CI nejen balí všechny softwarové a databázové komponenty, ale automatizace také provede testy jednotek a další testování. Toto testování poskytuje vývojářům zpětnou vazbu, že jejich změny kódu neporušily žádné stávající testy jednotek.

Většina nástrojů CI / CD umožňuje vývojářům zahájit sestavení na vyžádání, spuštěné revizemi kódu v úložišti správy verzí nebo podle definovaného plánu. Týmy musí projednat plán sestavení, který nejlépe vyhovuje velikosti týmu, očekávanému počtu denních závazků a dalším hlediskům aplikace. Osvědčený postup, jak zajistit, aby revize a sestavení byly rychlé, jinak by to mohlo bránit postupu týmů, které se snaží rychle kódovat a často se angažovat.

Kontinuální testování jde nad rámec automatizace testů

Automatizované testovací rámce pomáhají technikům zajišťujícím kvalitu definovat, provádět a automatizovat různé typy testů, které mohou vývojovým týmům pomoci zjistit, zda sestavení softwaru vyhovuje nebo selže. Zahrnují testy funkčnosti, které jsou vyvinuty na konci každého sprintu a agregovány do a regresní test pro celou aplikaci. Tyto regresní testy poté informují tým, zda změna kódu selhala u jednoho nebo více testů vyvinutých ve všech funkčních oblastech aplikace, kde existuje testovací pokrytí.

Osvědčeným postupem je povolit a vyžadovat, aby vývojáři spouštěli všechny nebo podmnožinu regresních testů ve svých místních prostředích. Tento krok zajišťuje, že vývojáři odevzdají kód pouze k řízení verzí poté, co regresní testy předají změny kódu.

Regresní testy jsou jen začátek. Lze také automatizovat testování výkonu, testování API, statickou analýzu kódu, testování zabezpečení a další testovací formuláře. Klíčem je být schopen tyto testy spouštět buď pomocí příkazového řádku, webhooku nebo webové služby a že budou reagovat na stavové kódy úspěchu nebo selhání.

Jakmile je testování automatizované, kontinuální testování znamená, že je automatizace integrována do kanálu CI / CD. Některé testy jednotky a funkčnosti lze integrovat do CI, které označí problémy před nebo během procesu integrace. Testy, které vyžadují úplné prostředí pro doručování, jako je testování výkonu a zabezpečení, jsou často integrovány do CD a prováděny po doručení sestavení do cílových prostředí.

Potrubí CD automatizuje změny do různých prostředí

Kontinuální doručování je automatizace, která posouvá aplikace do doručovacích prostředí. Většina vývojových týmů má obvykle jedno nebo více vývojových a testovacích prostředí, ve kterých jsou změny aplikací připraveny pro testování a kontrolu. K automatizaci kroků a poskytování zpráv se používá nástroj CI / CD, jako jsou Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo nebo Travis CI.

Typický kanál CD má fáze sestavování, testování a nasazení. Sofistikovanější kanály zahrnují mnoho z těchto kroků:

  • Vytahování kódu z řízení verzí a provádění sestavení.
  • Provádění všech požadovaných kroků infrastruktury, které jsou automatizovány jako kód pro postavení nebo zbourání cloudové infrastruktury.
  • Přesunutí kódu do cílového výpočetního prostředí.
  • Správa proměnných prostředí a jejich konfigurace pro cílové prostředí.
  • Odesílání komponent aplikace do jejich příslušných služeb, jako jsou webové servery, služby API a databázové služby.
  • Provedení jakýchkoli kroků potřebných k restartování služeb nebo volání koncových bodů služby, které jsou potřebné pro nové kódy push.
  • Provádění průběžných testů a prostředí pro vrácení zpět, pokud testy selžou.
  • Poskytování údajů protokolu a upozornění na stav dodávky.

Jako příklad uživatelé Jenkins definují své kanály v souboru Jenkins, který popisuje různé fáze, jako je sestavení, testování a nasazení. Proměnné prostředí, možnosti, tajné klíče, certifikace a další parametry jsou deklarovány v souboru a poté odkazovány po etapách. Sekce post zpracovává chybové stavy a oznámení.

Sofistikovanější CD může mít další kroky, jako je provádění synchronizace dat, archivace informačních zdrojů nebo provádění oprav aplikací a knihoven. Nástroje CI / CD obvykle podporují tržiště zásuvných modulů. Například Jenkins uvádí více než 1 500 modulů plug-in, které podporují integraci s platformami třetích stran, uživatelským rozhraním, správou, správou zdrojového kódu a správou sestavení.

Jakmile je vybrán nástroj CI / CD, vývojové týmy musí zajistit, aby všechny proměnné prostředí byly konfigurovány mimo aplikaci. Nástroje CI / CD umožňují nastavení těchto proměnných, maskování proměnných, jako jsou hesla a klíče účtu, a jejich konfigurace v době nasazení pro cílové prostředí.

Nástroje CD také poskytují funkce palubní desky a hlášení. Pokud se sestavení nebo dodání nezdaří, upozorní vývojáře informacemi o selháních. Integrují se s řízením verzí a agilními nástroji, takže je lze použít k vyhledání toho, jaké změny kódu a uživatelské příběhy tvoří sestavení.

Implementace kanálů CI / CD s Kubernetes a bezserverovými architekturami

Mnoho týmů provozujících kanály CI / CD v cloudových prostředích také používá kontejnery, jako je Docker, a orchestrační systémy, jako je Kubernetes. Kontejnery umožňují standardní a přenosné způsoby balení a přepravy. Kontejnery usnadňují škálování nebo bourání prostředí, která mají proměnnou pracovní zátěž.

Existuje mnoho přístupů k společnému používání kontejnerů, infrastruktury jako kódu a potrubí CI / CD. Možnosti můžete prozkoumat procházením kurzů, jako je Kubernetes s Jenkinsem nebo Kubernetes s Azure DevOps.

Výpočetní architektury bez serveru představují další cestu k nasazování a škálování aplikací. V prostředí bez serveru je infrastruktura plně spravována poskytovatelem cloudových služeb a aplikace spotřebovává prostředky podle potřeby na základě své konfigurace. Například na AWS lze bezserverové aplikace spuštěné jako funkce a nasazení Lambda integrovat do kanálu Jenkins CI / CD s modulem plug-in.

CI / CD umožňuje častější nasazení kódu

Stručně řečeno, balíčky CI a testy softwaru vytvářejí a upozorňují vývojáře, pokud jejich změny selhaly při jakýchkoli testech jednotek. CD je automatizace, která přináší změny infrastruktury a provádí další testy.

Pipeliny CI / CD jsou určeny pro podniky, které chtějí často vylepšovat aplikace a vyžadují spolehlivý proces doručování. Další snahou o standardizaci sestavení, vývoj testů a automatizaci nasazení je výrobní proces pro nasazení změn kódu. Jakmile je na místě, umožňuje týmům soustředit se na proces vylepšení aplikací a méně na podrobnosti systému, který jej dodává do výpočetního prostředí.

CI / CD je devops best practice, protože řeší nesouosost mezi vývojáři, kteří chtějí často tlačit na změny, s operacemi, které chtějí stabilní aplikace. Díky zavedené automatizaci mohou vývojáři tlačit na změny častěji. Provozní týmy vidí větší stabilitu, protože prostředí mají standardní konfigurace, v procesu doručování probíhá nepřetržité testování, proměnné prostředí jsou odděleny od aplikace a postupy vrácení zpět jsou automatizovány.

Dopad implementace kanálů CI / CD lze měřit jako klíčový indikátor výkonu devops (KPI). Při implementaci CI / CD s průběžným testováním se často zlepšují klíčové ukazatele výkonu, jako je frekvence nasazení, změna doby vedení a střední doba do zotavení (MTTR) z incidentu. CI / CD je však jen jeden proces, který může řídit tato vylepšení, a existují další předpoklady pro zlepšení frekvencí nasazení.

Začínáme s CI / CD vyžaduje, aby vývojové týmy a operační týmy spolupracovaly na technologiích, postupech a prioritách. Týmy potřebují dosáhnout konsensu o správných přístupech k jejich podnikání a technologiím, aby jakmile bude CI / CD na místě, tým se zapojí a bude důsledně dodržovat následující postupy.

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