Také jste už zažili bezesnou noc před vydáním nové verze svého produktu? Agilní metody zavedly iterativní vývoj, který stres před koncem projektu zmírňuje, ale u některých týmů stále zůstává stres před koncem sprintu, nemluvě o tom, že mnohé týmy používají i speciální „release sprint“. Představte si ale svět, ve kterém by vydání nové verze bylo stejně bezbolestné jako stisk tlačítka myši. Jak se dostat do takového světa, radí kniha autorů Jeze Humble a David Farley: “Continuous Delivery” (nezaměňovat s Continuous Deployment)
Jejich základní myšlenka je vlastně prostá a dá se aplikovat na prakticky jakoukoliv činnost při vývoji software: “Když ti něco způsobuje problém, dělej to co nejčastěji.” Pokud tedy máme stresy z vydávání nové verze, dělejme, jako že vydáváme novou verzi s každou změnou kódu. Pokud si projdeme procesem vydání tísíckrát nanečisto, vlastní vydání už vlastně nebude nic nového a rizikového.
Jak toho ale dosáhnout? Autoři popisují strukturu tzv. Deployment Pipeline. Je samozřejmě založena na metodě průběžné integrace (CI), ale celou myšlenku dotahuje mnohem dál. Po každé změně v kódu se spustí překlad programu a jednotkové testy. Pokud neprojdou (a to se stane maximálně do 10 minut), příslušný vývojáře je okamžitě informován a je povinen dát kód do pořádku. To je klasická, průběžná integrace, jak ji známe a používáme už několik let.
Co se ale stane, když jednotkové testy projdou? Humble a Farley doporučují, aby se celý proces nezastavil a pokračoval dál – následovat má automatické sestavení instalačních balíků, automatická instalace produktu na různá prostředí a spuštění automatických testů, často paralelních. Po této fázi je instalační balík povýšen na „release candidate“ a je k dispozici pro manuální průzkumné testování či případné další kroky (demo, zátěžové testování, testování v prostředí odpovídajícím prostředí zákazníka, formální schválení, atp.).
K přesunu do těchto dalších fází už se používá „pull“ principu známého z lean managementu. Pokud instalační balík projde i těmito závěrečnými fázemi, je připraven k nasazení u zákazníka.
Autoři jsou velkými příznivci automatizace ve všech fázích procesu. Zrovna tak propagují všechny ostatní rozumné techniky, o kterých se lze dočíst v jiných knihách jako např. test-driven development, časté odevzdávání kódu, rychlé sestavení, atd. Hlavní síla knihy ale spočívá v tom, že dává praktický návod, jak zorganizovat druhou část procesu – instalaci produktu do různých prostředí a jejich automatické otestování. Zabývají se i pokročilými tématy jako virtualizací, vhodnou správou vývojových větví nebo závislostí mezi moduly ve velkých projektech.
Je jasné, že vytvořit dobře fungující prostředí, které umožňuje dodat zákazníkovi prakticky každou verzi vašeho produktu je netriviální úkol, ale pokud zvládnete rozdělení vašich testů do kvadrantů, paralelizaci testů, modro-zelené vydávání, automatickou správu testovacích prostředí, automatickou migraci dat a další popsané techniky, můžete už všechny další noci trávit pouze spaním nebo jinými příjemnými činnostmi.