čtvrtek 27. února 2014

Go není další Jenkins a je to dobře

ThoughtWorks oznámili uvolnění platformy Go jako open source. Go realizuje myšlenky, které ThoughtWorks dlouhodobě razí tj. Continuous Integration a především Continuous Delivery. Samotné Go je zajímavé z několika úhlů pohledu. Přestože existuje celá řada CI serverů, s uceleným konceptem realizace Continuous Delivery zatím nikdo nepřišel až do představení Go - kolega to trefně nazval post Jenkinsovou érou. Go je postavený podle myšlenek a zkušeností, které popsali pánové Jez Humble a David Farley v knize Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation.

One size fits all vs. Lego

Jenkins se stal v mnoha firmách páteří Continuous Integration infrastruktury neboť nabízí velmi dobrou rozšiřitelnost. Existuje celá řada rozšíření, pomocí kterých můžete nad Jenkinsem vystavět prakticky jakýkoliv proces v oblasti testování a nasazení. Jenkins a jeho rozšíření představují Lego skládačku, ze které si postavíte cokoliv. Když vám náhodou nějaká funkcionalita chybí, můžete si jí naprogramovat. Díky Lego konceptu dostanete kostičky, které si musíte sestavit dohromady, aby dávaly dohromady požadovanou funkcionalitu. Bohužel neexistují v uvozovkách Lego stavebnice, které by obsahovaly jenom otestovanou sadu realizující konkrétní use case například Continuous Delivery. Lego koncept umožňuje teoreticky postavit cokoliv, ale prakticky, a to jsme si v GoodData vyzkoušeli mnohokrát, to je velmi nákladné a velmi křehké.

Náklady na skládání kostiček nesete nejenom na úrovni vývoje a testování výsledného řešení, ale i jeho udržování. Při vývoji si musíte nejdříve najít pluginy, pomocí kterých by šel váš scénář realizovat, zjistit jestli by spolu nějak mohly spolupracovat a potom je umě pospojovat dohromady. Prakticky jakýkoliv upgrade Jenkinse a nebo jednoho z jeho rozšíření může vést k tomu, že se celé řešení rozsype jako domeček z karet. Nezanedbatelnou roli hraje doménová znalost problému např. Continuous Delivery. Pokud nevíte co máte postavit, těžko to postavíte.

Doménová znalost Continuous Delivery a realizace jeho základních konceptů přímo v jádru systému je podle mého obrovskou výhodou Go oproti Jenkinsu. Go nabízí rozšiřitelnost, díky které můžete systém přizpůsobit vašim potřebám. Go mi dává smysl v tom, že se nesnaží profilovat jako další Continuous Integration server, ale jako realizace Continuous Delivery infrastraktury. Go nebude zcela určitě Jenkins killer, stále tu budou společnosti, které budou využívat jeho Lego vlastností v oblasti testovací infrastruktury a Continuous Integration.

Kdybych měl dnes znovu začít na vývoji platformy, kterou se v GoodData snažíme realizovat Continuous Integration/Delivery viz Evoluce Continuos Integration infrastruktury v GoodData, určitě bych jí začal stavět právě nad Go. Ušetřilo by nám to spoustu programování a práce s ohýbáním a laděním Jenkinse (pipeliny, propagování artefaktů, vizualizace a mohl bych pokračovat dál). S Go nemám žádné zkušenosti a možná se tahle implementace dlouhodobě neprosadí, ale koncept je krok správným směrem. Mimochodem dejte mi vědět pokud by vás práce s Go zajímala.