Kontinuální integrace (CI, continuous integration) je metodika pro konzistentní způsob automatizace sestavení softwaru, tvorby balíčků a vykonávání testů. CI pomáhá týmu získat jistotu, že změny, které udělají při řízení verzí zdrojového kódu, nezpůsobí vadné sestavení ani nezavlečou chyby do softwaru.
Vyvíjíte už podnikové aplikace s pomocí AI nástrojů?
Koncovým bodem CI je obvykle dokončená integrace, tj. potvrzení (check-in) do hlavní větve softwarového repozitáře.
Kontinuální dodávání (CD, continuous delivery) zase automatizuje dodávání testovaného softwaru přímo do prostředí infrastruktury. To ale obvykle neznamená, že by software skončil hned v produkčním prostředí, aby se následně ukázalo, zda si uživatelé nebudou stěžovat.
Organizace obvykle začínají předáním sestavení do vývojového prostředí. Poté, co samotní vývojáři dokončí novou variantu a vydají ji, obvykle putuje do testovacího prostředí, kde se používá širší skupinou uživatelů (někdy jsou to jen specializovaní interní testeři, jindy větší tým uživatelů přihlášených do testování betaverze) a podrobně se monitoruje.
Když jde vše dobře, testeři nakonec sestavení potvrdí a novou verzi odešlou směrem do produkčního prostředí.
V každé fázi CD existují možnosti, jak se rychle vrátit ke staršímu sestavení a vygenerovat tikety nahlašující chyby (bug report) vývojářům, aby se odstranily chyby v novém sestavení.
Cílem tedy není dodávat do produkčního prostředí hodně sestavení, ale kontinuálně zlepšovat a vylepšovat software bez zavlečení nových i starých chyb. Dalším pojmem pro tyto metody je také „DevOps.“
Níže uvádíme osm bodů, které byste měli vzít v úvahu při volbě cloudového řešení CI/CD, a také vám podrobněji představíme několik klíčových cloudových platforem CI/CD.
1. Proč umístit CI/CD do cloudu?
Hostování platformy CI/CD ve vašem vlastním datovém centru je určitě životaschopná možnost, zejména pro společnosti, které požadují hostování svých aplikací a dat uvnitř svého prostředí chráněného firewallem.
Nevýhodou tohoto řešení je, že budete potřebovat specializovaný tým k udržování infrastruktury a budete platit investiční výdaje za servery.
Pokud zvolíte umístění v cloudu, bývá to obvykle lepší volba. Náklady za umístění v cloudu jsou už přiměřené a tyto provozní náklady jsou kompenzované poskytovanými službami, jako jsou onboarding, údržba infrastruktury i zabezpečení, podpora a správa softwaru CI/CD.
Umístění vašeho řešení CI/CD v cloudu často usnadňuje a zrychluje interakce vývojového potrubí s repozitáři zdrojového kódu, pokud jsou také v cloudu. Jestliže jsou vaši vývojáři a testeři geograficky na různých místech, přináší jim umístění vašich repozitářů v cloudu často lepší zkušenost než umístění na vzdálených firemních serverech za firewally.
Chcete dostávat do mailu týdenní přehled článků z Computerworldu? Objednejte si náš mailový servis a žádná důležitá informace vám neuteče. Objednat si lze také newsletter To hlavní, páteční souhrn nejdůležitějších článků ze všech našich serverů. Newslettery si můžete objednat na této stránce.
CI/CD je také možné zavést hybridním způsobem, to znamená v kombinaci vlastní infrastruktury a cloudových serverů. Několik nejnovějších nabídek CI/CD běží v kontejnerech na clusterech Kubernetes, které mohou běžet stejně dobře jak ve vlastních infrastrukturách, tak i v cloudu.
Ve scénáři hybridního nasazení můžete umístit každou komponentu tam, kde to má větší smysl vzhledem k fyzickému místu samotných vývojářů a síťovým umístěním ostatních serverů ve vývojové infrastruktuře.
2. CI/CD se musí integrovat s vašimi repozitáři
Jak jste si už možná domysleli při přečtení věty: „koncovým bodem CI je obvykle dokončená integrace, tj. potvrzení (check-in) do hlavní větve softwarového repozitáře,“ jsou repozitáře pro CI a CD naprosto zásadní.
Kromě toho, že jsou koncovým bodem procesu check-in a testování, jsou softwarové repozitáře preferovaným místem k ukládání skriptů CI a CD a konfiguračních souborů. Ano, mnoho platforem CI/CD si může ukládat skripty a další soubory interně, ale obvykle je lepší mít je s řízením verzí externě mimo daný nástroj.
Téměř všechny nástroje CI/CD dokážou využívat Git. Některé také dokážou přímo využívat GitHub, GitHub Enterprise, GitLab či Bitbucket. Několik také podporuje Subversion a Mercurial.
3. Vaše nástroje CI/CD musejí podporovat vaše programovací jazyky a nástroje
Každý programovací jazyk a skupina jazyků (JVM, LLVM, .NET atd.) mají tendenci mít své vlastní nástroje pro sestavení a testování. Aby pro vás tedy byl nástroj CI/CD užitečný, musí podporovat všechny jazyky, které jsou součástí daného projektu. Jinak možná budete muset pro tento nástroj vytvořit jeden nebo více zásuvných modulů.
Bitové kopie Docker jsou stále více důležité pro nasazení softwaru distribuovaným, modulárním způsobem s využitím mikroslužeb.
Hodně pomáhá, když váš nástroj CI/CD ví, jak s bitovými kopiemi Docker pracovat, včetně vytvoření bitové kopie z vašeho zdrojového kódu, umí práci s binárními soubory, prerekvizitami a když umí nasadit bitovou kopii do konkrétního prostředí.
Video ke kávě
Máte čas na rychlé a informativní video?
Opět platí, že při absenci této výhody možná budete muset vytvořit zásuvné moduly plug-in nebo skripty, abyste implementovali funkcionalitu pro Docker, kterou potřebujete.
Podobně budete chtít, aby váš nástroj CI/CD podporoval Kubernetes a jakékoli další systémy orchestrace kontejnerů, které používáte ve svém prostředí.
4. Rozumí vaši vývojáři CI/CD a nástrojům, které zvažujete?
Principy CI a CD se mohou zdát zřejmé, ale pro detaily to neplatí. Různé nástroje CI/CD mají různé úrovně podpory a dokumentace. Například pro Jenkins existuje více knih, což není překvapivé, když je nejstarší. Při pečlivém výběru nástroje ale možná budete muset u ostatních produktů prozkoumat dokumentaci a podporu na fórech a možnosti placené podpory.
Pro obecný přehled o CI můžete využít knihu z vydavatelství Addison-Wesley: Continuous Integration (Duvall a kolektiv). Podobně pro obecný přehled o CD zvažte knihu Continuous Delivery (Humble a Farley). Obě publikované knihy získaly ocenění Jolt.
5. Různé nástroje CI/CD pro různé projekty
Přestože se zde uvedená doporučení týkají výběru nástroje CI/CD, nepředpokládejte, že pro všechny vaše projekty vývoje softwaru je ideální jedna platforma. Většina pracovišť používá více programovacích jazyků a prostředí, přičemž ne každá platforma CI/CD je bude všechny podporovat dobře.
Neváhejte použít různé platformy CI/CD, které fungují nejlépe pro každý z vašich projektů, než abyste hledali nějakou jednu kompromisní platformu.
Obecné principy CI a CD platí pro všechny platformy, přestože skripty nemusí být vždy přenosné. I když může zavedení každé platformy stát váš tým DevOps nějaký čas, je to s největší pravděpodobností levnější, než nutnost výrazně si přizpůsobit dosavadní nástroj CI/CD.
6. Plánujte budoucí migraci CI/CD
Podle stejného principu nepředpokládejte, že bude daná platforma CI/CD navždy vyhovovat potřebám vašich projektů. Vždy se pojistěte, například ukládáním skriptů v repozitářích namísto přímo v nástrojích CI/CD.
7. Preferujte serverless CI/CD, když je to vhodné
Obecně jsou nasazení cloudových kontejnerů levnější než nasazení instancí cloudového serveru a cloudové nasazení serverless jsou ještě levnější než v případě kontejnerů. Bohužel v současné době využívá koncept serverless jen pár platforem CI/CD.
Serverless znamená, že se instance kontejneru vykonávající požadovanou práci vytváří podle potřeby, obecně v reakci na událost. V případě CI/CD je spouštěcí událostí check-in kódu do konkrétní větve repozitáře. Webhook repozitáře následně spustí proces serverless. Po dokončení procesu se zdroje zase uvolní.
Jedna z mála platforem CI/CD, která dokáže využívat koncept serverless, je Serverless CI/CD, součást Serverless Framework Pro, což je vylepšená verze open source frameworku Serverless Framework.
Serverless CI/CD má optimalizaci pro nasazování serverless aplikací a funguje v cloudu AWS. Budete muset zjistit, zda podporuje vaši aplikaci dostatečně dobře, aby to mělo smysl.
8. Umístění vašich současných cloudových aktiv
Pro účely optimalizace cloudové konfigurace CI/CD (nebo jakékoli cloudové aplikace) pomáhá, když jsou všechna vaše aktiva „blízko“ sebe. Pojem „blízko“ v této souvislosti částečně odkazuje na geografickou polohu a částečně odkazuje na síťové umístění.
Pokud je například vaše databáze v Austrálii a aplikace naopak v Evropě, nastane velké zpoždění pokaždé, když aplikace potřebuje číst nebo zapisovat data.
V menším měřítku, pokud jsou vaše aplikace a databáze ve stejné zóně dostupnosti (AZ, availability zone), bude latence mezi nimi minimalizovaná. Pokud jsou v různých zónách ve stejném regionu, bude latence vyšší, ale ne zase tak vysoká, jako by byla v případě rozdílných regionů.
Podobně platí, že pokud je vaše databáze na platformě Google Cloud v jedné zemi a vaše aplikace v cloudu Microsoft Azure ve stejném místě, bude latence vyšší, než v případě umístění obou součástí u stejného poskytovatele ve stejné AZ.
To vše se také vztahuje na váš repozitář (což je v podstatě databáze), na váš software CI/CD, na vaši skutečnou aplikaci i na vývojáře a testery. Pomáhá, když je vše „blízko,“ přestože dopady zpoždění nejsou v této situaci tak problematické, jako by to bylo třeba u interaktivní hry v reálném čase.
Pokud mohou vývojáři odesílat commity kódu do hlavního repozitáře spolehlivě a bez znatelné doby čekání, obvykle budou dostatečně spokojení.
Podobné to je v případě uživatelů a testerů. Když jsou dostatečně „blízko,“ k aplikaci, aby docházelo k odezvám za dobu kratší než sekunda, budou také spokojení.
Pro software CI/CD je zásadní spolehlivé připojení k bodům nasazení. Malé zpoždění může být tolerovatelné, pokud nezpůsobuje vypršení časových limitů a ztrátu paketů.
Dostupné nástroje
Existuje překvapivý počet cloudových služeb, které podporují DevOps. Jako příklad je zde seznam 14 dodavatelů cloudových produktů CI/CD. Uvedení v seznamu nelze vykládat jako doporučení a nepřítomnost v seznamu také nemá žádný negativní význam.
· AWS CodePipeline
AWS CodePipeline je plně spravovaná služba CD, která vám pomůže automatizovat vaše potrubí vydávání pro rychlé a spolehlivé aktualizace aplikací a infrastruktury. Na základě modelu vydávání, který definujete, automatizuje CodePipeline fáze sestavení, testování a nasazení procesu vydání pokaždé, když dojde ke změně kódu.
To vám umožní dodávat rychle a spolehlivě funkce a aktualizace. AWS CodePipeline můžete také snadno integrovat se službami třetích stran, jako je např. GitHub, nebo s vaším vlastním pluginem.
· Azure DevOps
Azure DevOps poskytuje vývojářské služby, které týmům pomáhají plánovat práci, spolupracovat na vývoji kódu a vytvářet a nasazovat aplikace. Pracovat můžete v cloudu s využitím služeb Azure DevOps Services nebo můžete pracovat ve vlastní infrastruktuře s využitím platformy Azure DevOps Server.
Azure DevOps poskytuje integrované funkce, ke kterým máte přístup prostřednictvím svého webového prohlížeče a pomocí klienta prostředí IDE. Azure Pipelines poskytuje služby sestavování a vydávání, které podporují CI a CD.
Mezi další samostatné služby patří Azure Repos (Git a Team Foundation), Agile Boards (sada nástrojů Agile), Azure Test Plans (nástroje pro manuální/předběžné testování a kontinuální testování) a Azure Artifacts (umožňuje týmům sdílet balíčky z veřejných a soukromých zdrojů).
· Bitbucket Cloud
Atlassian Bitbucket Cloud kombinuje hostování kódu Git, řízení zdrojů a vestavěné řešení CI/CD v Bitbucket Pipelines. Nabízí také integrace s nástroji Atlassian JIRA (sledování požadavků) a Trello (řízení projektů stylem kanban) a poskytuje vývojovým týmům jedno centrální místo pro plánování projektů, spolupráci na kódu, testování a nasazení.
· Bitrise
Bitrise je platforma DevOps a CI/CD zaměřená na vývojáře mobilních aplikací. Podporuje širokou řadu technologií – mj. Swift, Objective-C, Java, Kotlin, Cordova, Ionic, React Native a Flutter. Bitrise lze integrovat se službami GitHub, GitLab, Bitbucket a dalšími službami řízení zdrojů Git, jak v cloudu, tak i ve vlastní infrastruktuře.
Bitrise se účtuje jako „plně vybavené řešení pro mobilní CI/CD v cloudu, pro všechny platformy a bez požadavků na hardware,“ což znamená, že kromě sestavení běžících na linuxových počítačích jsou také MacOS sestavení součástí všech plánů, a to včetně těch pro neplatící uživatele a projekty open source.
· CircleCI
CircleCI dokáže automatizovat sestavení pro více prostředí, jak v cloudu, tak i ve vlastní infrastruktuře. Nabízí integraci pro GitLab, GitHub a Bitbucket a nasazení do cílů včetně AWS, Azure, Google Cloud, Artifactory a npm.
Můžete si vybírat z tisíců již existujících integrací nebo si vytvořit vlastní, optimalizovat sestavení pro rychlost, spouštět úlohy současně a zajistit, že jsou projekty sestavované, nasazované a udržované bezpečným způsobem. Mezi prostředí pro sestavení patří Docker, Linux (včetně emulátorů Android), macOS, Windows, GPU a Arm.
· CloudBees
CloudBees je řešení automatizace dodávání softwaru pro velké organizace, které mají na prvním místě dodržování předpisů. Nabízí týmům vývoje softwaru CI/CD založené na Jenkins, orchestraci vydávání, správu funkcí a schopnosti VSM (value stream management). Zároveň poskytuje řízení se zmírněním rizik, podporu pro dodržování předpisů a schopnosti správy.
Platforma CloudBees poskytuje nástroje, které organizacím umožňují vytvářet samoobslužné, rychlé a zabezpečené pracovní postupy a propojit dodávání softwaru s obchodními výsledky.
· Codefresh
Codefresh je platforma pro dodávání softwaru pro Kubernetes na platformě Argo. Využívá model GitOps, kde je infrastruktura jako kód verzovaná v repozitáři. Codefresh využívá Argo CD, Argo Workflows, Argo Events a Argo Rollouts s rozšířením o funkce a vlastnosti potřebné pro podniková nasazení.
Codefresh nabízí zabezpečení, udržovatelnost, sledovatelnost a jedno řízení pro všechny zúčastněné strany, ať už jsou to vývojáři, provozovatelé, vlastníci produktů nebo projektoví manažeři. Codefresh podporuje GitHub, GitLab a Bitbucket.
· GitHub Actions
GitHub Actions je platforma CI a CD hostovaná na GitHubu, která umožňuje automatizaci potrubí sestavení, testování a nasazení. Můžete vytvořit pracovní postupy, které vytvoří sestavení a zajistí otestování pro každý požadavek pull pro váš repozitář, nebo nasadí sloučené požadavky pull do produkčního prostředí.
GitHub Actions vám také umožní spouštět pracovní postupy při výskytu dalších událostí ve vašem repozitáři. (Můžete například spustit pracovní postup pro automatické přidání příslušných štítků, kdykoli někdo vytvoří „issue“ v repozitáři.)
GitHub nabízí virtuální stroje Linux, Windows a macOS pro spouštění pracovních procesů, nebo je můžete spouštět ve vlastních virtuálních strojích v cloudu či ve vlastní infrastruktuře (self-hosted runner). GitHub Actions podporuje Node.js, Python, Java, Ruby, PHP, Go, Rust, .NET a Swift.
· GitLab CI/CD
GitLab CI/CD je součást GitLabu použitelná pro všechny kontinuální metody – integraci, dodávání a nasazování. GitLab CI/CD vám umožní sestavit, testovat, nasadit a monitorovat vaše aplikace bez potřeby aplikací či integrací od třetích stran.
GitLab automaticky detekuje váš programovací jazyk a používá šablony CI/CD k vytváření a spouštění výchozích potrubí pro sestavení a testování vaší aplikace. Následně můžete nakonfigurovat nasazení své aplikace do zkušebního provozu a do produkčního prostředí, a nastavit nástroj Review Apps.
GitLab CI/CD vám může pomoci zachytit chyby v rané fázi vývoje a zajistit, že veškerý kód nasazovaný do produkčního prostředí odpovídá standardům, které jste zavedli pro svou aplikaci.
· Google Cloud Build
Google Cloud Build je cloudová, plně spravovaná platforma CI/CD, která vám umožní spustit sestavení v rámci Google Cloudu, v dalších veřejných cloudech a systémech vlastních infrastruktur, nebo dokonce výhradně ve vaší vlastní privátní síti.
Potrubí můžete vytvořit jako součást kroků pro sestavování pro automatizaci nasazení. Nasazování je možné pomocí vestavěných integrací pro Google Kubernetes Engine, Google App Engine, Google Cloud Functions a Google Firebase.
Můžete nastavit spouštěče pro automatické sestavení, testování a nasazení zdrojového kódu, když odesíláte změny do repozitářů – GitHub, Google Cloud Source Repositories a Bitbucket. Cloud Build lze využít s platformou Spinnaker k vytváření a spouštění složitých potrubí.
· IBM Cloud Continuous Delivery
IBM Cloud Continuous Delivery nabízí sady nástrojů, potrubí a integrací nástrojů pro dodávání softwaru. Můžete vytvářet sady nástrojů zahrnující služby IBM, nástroje open source i řešení třetích stran, které zajistí opakovatelnost procesů vývoje a provozu a usnadní jejich správu.
Sestavení, testování a nasazení lze dělat opakovatelným způsobem s minimem lidských intervencí s využitím potrubí pro dodávání na základě frameworku Tekton. Svůj zdrojový kód můžete spravovat a svou práci sledovat pomocí repozitářů Git. Issue tracking hostuje IBM a základem je Gitlab Community Edition.
Můžete rychle zajistit sady nástrojů pro DevSecOps, nasazení do Kubernetes, Cloud Foundry, VM a další se sdílenými přizpůsobitelnými šablonami, které zahrnují nástroje IBM, open source a nástroje třetích stran.
· Spinnaker
Spinnaker je open source vícecloudová platforma CD navržená tak, aby vám pomohla vydávat změny softwaru rychle a s jistotou. Spinnaker kombinuje funkce správy aplikací umožňující prohlížet a spravovat vaše cloudové prostředky pomocí funkcí nasazení aplikací, které vám umožní vytvářet a spravovat pracovní postupy CD.
Spinnaker je zralá a široce využívaná platforma CD, která umožňuje využít odbornosti společností Netflix, Google, Microsoft či Amazon pro váš životní cyklus vývoje softwaru.
· TeamCity
TeamCity je řešení CI/CD pro obecné účely od JetBrains, které nabízí flexibilitu pro nejrůznější pracovní postupy a vývojové metody. TeamCity vám umožňuje psát konfiguraci CI/CD pomocí jazyka Kotlin, což vám poskytne sílu plnohodnotného programovacího jazyka a jeho sady nástrojů.
TeamCity nabízí integraci pro všechny systémy řízení verzí, nejen pro Git. Nativně podporuje jazyky Java, .NET, Python, Ruby a Xcode, další jazyky podporuje prostřednictvím pluginů. TeamCity nabízí integraci také pro Docker, YouTrack, Jira, Bugzilla, Maven, Visual Studio Team Services a NuGet.
· Travis CI
Travis CI je nástroj pro kontinuální integraci a nasazení, který poskytuje flexibilní automatizaci pro vaše sestavení, testy a nasazení. Kromě automatického sestavení a testování změn kódu dokáže Travis CI automatizovat další části vašeho vývojového procesu řízením nasazení a oznámení.
To znamená, že můžete mít na sobě vzájemně závislé úlohy využívající Build Stages, nastavení oznámení, přípravu nasazení po sestavení a vykonávání mnoha dalších úkolů.
Travis CI je také první služba CI, která nabízí služby projektům open source zdarma. Travis CI nabízí podporu pro platformy Assembla, Bitbucket, GitHub, GitLab a pro více než 30 programovacích jazyků.
Ověření konceptu
CI/CD bude po plné implementaci kritickou součástí vaší infrastruktury. Pamatujte na to a nespěchejte. Je důležité provést přísné ověření konceptu dříve, než začnete zavádět potrubí CI/CD.
Před zahájením fáze CD si napřed pořádně vylaďte CI. Před připojením jakýchkoli potrubí CI/CD do jednotlivých produkčních prostředí se ujistěte, že řádně probíhají navržené testy, že jsou k dispozici funkce návratu k předchozím verzím, a nezapomínejte na potřebu lidské kontroly, dokud nebude automatizace neotřesitelně perfektní.
Computerworld si můžete objednat i jako klasický časopis. Je jediným odborným měsíčníkem na českém a slovenském trhu zaměreným na profesionály v oblasti informačních a komunikačních technologií (ICT). Díky silnému zázemí přináší aktuální zpravodajství, analýzy, komentáře a přehledy nejnovejších technologií dříve a na vyšší odborné úrovni, než ostatní periodika na tuzemském trhu.
Obsah Computerworldu je určen odborníkům a manažerům z firem a institucí, kteří se podílejí na rozhodovacím procesu při nákupu ICT technologií. Jednotlivá čísla si můžete objednat i v digitální podobě.