„U mě to funguje“
V době, kdy se vyvíjí platforma pro aplikaci, je nezbytné zajistit stabilní a opakovatelné běhové prostředí, i když instalátor aplikace ještě není k dispozici. Nejednou jste se určitě setkali se situací, kdy vývojář hlásí „u mě to funguje“, ale Vy jste na svém prostředí identifikovali chybu. Co s tím?
Uveďme si příklad webové aplikace hostované na Windows, která využívá databázový server jako úložiště svých dat (například InfluxDB) a agenta pro sběr aplikačních metrik (například Telegraf) a je psaná v jazyce Rust. Pro svůj běh aplikace vyžaduje, aby tyto služby byly v systému již nainstalované a správně nakonfigurované. Aplikace v různých verzích připravených na testování dokonce vyžaduje i konkrétní verzi těchto služeb. Jak zajistíme, aby prostředí, ve kterém vyvíjí aplikaci vývojář bylo použito i při testování?
Potřebujeme k tomu nástroj, který nám do systému konzistentně a podle jasně daného předpisu nainstaluje všechny potřebné služby ve správných verzích, podle požadavků specifikovaných aplikací. Jedním z takových dostupných nástrojů může být například Docker, nebo balíčkovací systémy, jako je WinGET nebo Chocolatey. Dnes bude řeč o posledním jmenovaném.
Chocolatey [čoklitý] je správce balíčků pro operační systém Windows, který umožňuje rychlou a jednoduchou instalaci, aktualizaci a odinstalaci softwarových aplikací a nástrojů přímo z příkazového řádku. Podobně jako správce balíčků v Linuxových distribucích, jako je například apt pro Ubuntu nebo yum pro CentOS, nabízí Chocolatey centralizovaný způsob správy softwarových balíčků pro Windows. Jednoduchost a flexibilita činí Chocolatey oblíbeným nástrojem pro instalaci testovacích prostředí, správu vývojových prostředí a automatizaci nasazování softwaru.
Vlastnosti Chocolatey
- Zjednodušuje instalaci prostřednictvím jednoduchého, opakovatelného a automatizovaného přístupu pomocí univerzálního formátu balíčků. Ať už spravujete nativní instalační programy, zipy, skripty, spustitelné binárky nebo aplikace vyvinuté interně.
- Klade si za cíl automatizovat celý životní cyklus softwaru od instalace přes aktualizaci až po odinstalaci v operačních systémech Windows prostřednictvím jednotného rozhraní.
- Podporuje mnoho různých zdrojů balíčků. Můžete používat soukromý nebo veřejný repozitář, sofistikovanou galerii balíčků nebo jen jednoduché sdílení složky.
Jak Chocolatey funguje
Struktura a vytváření balíčků
Balíčky v Chocolatey jsou archivní soubory obsahující metadata a instalační skripty napsané v Powershellu. Metadata obsahují důležité informace, jako je název nebo popis, ale hlavně verze a identifikátor balíčku.
Balíček obsahuje metadata v souboru s příponou “.nuspec“, instalační skript “chocolateyinstall.ps1“, odinstalační skript “chocolateyuninstall.ps1” a pomocný skript pro upgrade a odinstalaci “chocolateybeforemodify.ps1“.
Pro vytvoření balíčku stačí použít příkazový řádek nebo nástroje jako Chocolatey Package Builder.
Dependencies (závislosti)
Chocolatey umožňuje definovat závislosti mezi balíčky. To znamená, že při instalaci jednoho balíčku mohou být automaticky nainstalovány i jeho závislosti. Závislosti jsou definovány v souboru “nuspec” v rámci metadat balíčku. Pozor, Chocolatey instaluje tyto závislosti v nedefinovaném pořadí a vždy před instalačním skriptem.
Nastavování parametrů
Parametry balíčků, jako například cílová složka instalace, verze softwaru nebo specifické konfigurační volby, mohou být definovány v instalačních skriptech balíčků. Parametry instalace se dají nastavit také pomocí přepínačů příkazového řádku při instalaci balíčku.
Publikování balíčků
Veřejné balíčky jsou obvykle publikovány v centrálním repozitáři Chocolatey Gallery. Soukromé balíčky mohou být publikovány v interním repozitáři nebo jednoduše do složky na disku.
Jak eliminovat „U mě to funguje“?
Vývojáři i testeři by měli být schopni jednoduše nainstalovat prostředí se všemi závislými službami, aplikacemi a vývojovými nástroji ve vyžadované verzi pro danou verzi aplikace. A to samé by mělo platit i pro CI/CD, tak aby aplikace byla sestavena vždy stejně. Tato instalace by měla být opravdu jednoduchá, aby se co nejvíce eliminovaly chyby vzniklé složitým nastavováním.
Důležitým faktorem je definice verzí build a runtime balíčků u zdrojového kódu, tak aby aplikace při sestavení mohla tyto definice použít pro kontrolu instalovaného prostředí. Takto se zajistí správné sestavení na správném prostředí a také kontrola správně nainstalovaného prostředí při spuštění aplikace.
Pokud si vezmeme aplikaci z našeho příkladu na začátku tohoto článku, tak pro sestavení potřebujeme nainstalovat Rust a NodeJs. Pro oba nástroje již existují balíčky v Chocolatey Gallery, a můžeme je tedy jednoduše přidat jako závislost do svého balíčku, který bude instalovat vývojové prostředí. V instalačních skriptech balíčku pak můžeme tyto nainstalované balíčky nakonfigurovat podle potřeb aplikace.
Pro běh naší aplikace zase potřebujeme Influx DB a Telegraf. Opět není problém balíčky s těmito službami najít ve veřejném repositáři, a tak nemusíme nic vytvářet a jen použijeme již existující balíčky jako závislosti. Chocolatey se pak postará o jejich instalaci.
S Chocolatey tak můžeme vytvořit instalační balíčky pro build a pro runtime. Build balíčky v sobě budou obsahovat potřebné služby a nástroje, které umožní instalaci prostředí nutného pro sestavení aplikace. Runtime balíčky zase instalují služby potřebné pro běh aplikace.
Protože si vytváříme vlastní balíčky a využíváme již existující balíčky jen jako závislosti, můžeme konzistentně upravovat konfiguraci pomocí instalačních skriptů uvnitř balíčku, jak v případě vývojářského prostředí, tak testerského. Verzované balíčky můžeme jednoduše sdílet v soukromém repozitáři, odkud si vývojáři i testeři jednoduchým příkazem choco install nainstalují identické prostředí.
Závěr
Chocolatey poskytuje jednoduché řešení pro rychlou a konfigurovatelnou instalaci prostředí, která se dá sdílet mezi všemi členy týmu. Nasaditelná je okamžitě a může tak akcelerovat začátky vývoje nového produktu, kdy ještě není definovaná strategie pro instalace do produkce.
Nejedná se však o řešení, kterým se dají řešit komplexnější instalace vyžadující konfiguraci závislostí. Pokud začnete narážet na potřebu nastavovat parametry pro závislosti, dvakrát se zamyslete, jestli není potřeba pro váš produkt nalézt sofistikovanější řešení.
Ukázkový projekt
Na našem Githubu najdete ukázkový projekt, na kterém si Chocolatey můžete vyzkoušet.
Po instalaci projektu si můžete ověřit správnost instalace a nainstalované balíčky (aplikace) použít například pro performance monitoring na vašem projektu.