Agilita pomocí Atlassian produktů III: VÝVOJ A DORUČENÍ

24.9.2020 | Miroslav Suchopar | Agile

Dnes pokračujeme dalším článkem ze série zabývající se možnostmi využití Atlassian nástrojů dle principů Agility. Tentokrát se příspěvek věnuje oblasti vývoje software a jeho doručení.

PRINCIPY AGILITY V OBLASTI VÝVOJE A DORUČENÍ SOFTWARE

Předchozí článek se zabýval principy agility z oblasti plánování a vyhodnocení vývoje software. Dnes se podíváme na možnosti využití Atlassian nástrojů z pohledu tří níže uvedených principů z oblasti samotného vývoje a doručení software. Rozdělení principů agility do jednotlivých oblastí si můžete připomenout v úvodním článku série Agilita pomocí Atlassian produktů.

  • Naší nejvyšší prioritou je vyhovět zákazníkovi časnou a průběžnou dodávkou hodnotného softwaru.
  • Dodáváme fungující software v intervalech týdnů až měsíců, s preferencí kratší periody.
  • Agilitu zvyšuje neustálá pozornost věnovaná technické výjimečnosti a dobrému designu.

12_principu_agility_vyvoj

Z pohledu vývoje a doručení software uvedené principy spolu úzce souvisí. První dva principy hovoří o průběžné dodávce fungujícího software v kratších intervalech, což je na jednu stranu záležitost plánování (prioritizace požadavků, jejich zařazení do sprintů apod.), na druhou stranu ale také vývoje. A to zejména z pohledu zajištění průběžné integrace (Continuous Integration) a průběžného doručení (Continuous Delivery) fungujícího software. V rámci vývoje software (nejen za pomocí Atlassian nástrojů) lze tuto část vývoje dobře zautomatizovat a zajistit tak efektivnější a zároveň na chyby méně náchylný proces průběžné dodávky software.

Technická výjimečnost, o níž by se dalo hovořit také jako o důrazu na kvalitu, je část vývoje, která bývá v tradičním přístupu často zanedbávána, typicky z důvodu nedostatku času a rozpočtu. Z pohledu agilních principů je však technická výjimečnost nezanedbatelnou součástí vývoje, na kterou je třeba neustále myslet. Ve chvíli, kdy se váš tým nemusí zabývat často se opakujícím sestavováním, testováním a vydáváním nových verzí díky nastavené automatizaci průběžné dodávky, může ušetřený čas věnovat právě technické výjimečnosti. Například členové týmu v roli QA (quality assurance) analytika se mohou místo provádění triviálních manuálních testů zaměřit více na zlepšování kvality dodávky zajištěním větší množiny testovacích dat a využitím lepších nástrojů, či pomoci vývojářům k dosažení psaní lepšího kódu.
Pojďme se blíže podívat na oblast průběžné integrace a průběžného doručení software.

Průběžná integrace (Continuous Integration)

Průběžnou integrací (CI) je označován souhrn nástrojů a postupů zajišťující brzkou a častou integraci kódu jednotlivých členů týmů do hlavní větve repozitáře (codebase). Cílem je minimalizace rizika výskytu velkých konfliktů při merge kódu jednotlivých členů týmu na konci projektu, iterace, či sprintu. Po každé změně je aktuální kód sestaven a otestován pomocí automatizovaných testů, což kromě konfliktů v kódu pomůže také k rychlému odhalení případných regresních chyb.

Myšlenka celého procesu je, že každý vývojář pravidelně – ideálně alespoň jedenkrát denně, nahrává svůj nový kód do hlavní větve repozitáře. Na základě commitu se spustí automatizované testy, které ověří, že nová funkcionalita neovlivnila negativně žádnou již fungující část kódu. Případný konflikt při merge kódu nebo odhalenou chybu může vývojář začít opravovat ihned, ještě než začne s vývojem dalšího požadavku. Díky malým přírůstkům bývá jednodušší a rychlejší odhalit zdroj problému, či pochopit nastalý konflikt. Celkově tím dochází k ušetření času hned z více důvodů. Automatické testy jsou rychlejší a pro jejich exekuci není třeba čerpat alokaci člena týmu, vývojář nepřepíná kontext a řeší případný problém ihned, díky malému přírůstku je pravděpodobnější, že samotná oprava bude vyžadovat méně času.

Hlavní výhody zavedení CI by se daly shrnout do následujících tří bodů:

  • Ušetření času v průběhu vývojového cyklu díky včasné identifikaci a adresování konfliktů při merge kódu,
  • snížení času potřebného na regresní testy a opravy chyb díky důrazu na včasné testování,
  • lepší pochopení báze kódu a souvislostí mezi vyvíjenými požadavky.

diagram

Průběžné doručení (Continuous Delivery)

Průběžné doručení (CD) se zaměřuje na automatizaci procesu uvolnění (release process) softwarových dodávek. Princip CD spočívá v iterativním cyklu, který ze skládá ze tří částí:

  1. Co možná nejvčasnějšího doručení hotového software koncovému uživateli,
  2. získání rychlé zpětné vazby od uživatelů na základě jejich reálné zkušenosti s dodanou funkcionalitou
  3. a zapracování připomínek do dalšího uvolnění.

Průběžné doručení lze vnímat jako nadstavbu průběžné integrace, která zajišťuje, aby sestavený a otestovaný kód byl rychle a průběžně nasazován na prostředí zákazníka. Jde tedy o automatizaci celého procesu uvolnění software, která probíhá samovolně na základě definovaných událostí, jako jsou změny v hlavní větvi báze kódu, sestavení artefaktů, či jejich otestování.

product

Součásti CI/CD

CI/CD se skládá z více praktik a postupů, mezi něž patří správa verzí zdrojového kódu, automatické testování, automatické sestavení (build) a automatické nasazení (deployment). Každá z těchto částí je reprezentována vlastními softwarovými nástroji. V dnešní době už existují také řešení, které pokrývají kompletně celou oblast. Abychom lépe porozuměli, co vše CI/CD platformy zahrnují, popišme si zmíněné jednotlivé části.

Správa verzí zdrojového kódu

Základním stavebním kamenem CI/CD je nástroj pro správu verzí zdrojového kódu (Source Control Version Management). Tento nástroj pomáhá vývojovým týmům spravovat změny v kódu prováděné současně různými členy týmu nad jednou společnou bází kódu. Mezi nejznámější a zároveň nejčastěji používané nástroje pro správu verzí kódu patří GIT, SVN, případně Mercurial. Nástroje pro správu verzí kódu se běžně používají v rámci platforem pro správu repozitářů, které rozšiřují uvedené nástroje o další funkce jako je možnost revize kódu, vyšší zabezpečení, možnost integrace s dalšími nástroji a jiné. Příkladem může být Bitbucket, či GitHub.

guide

Automatizované testy

V rámci mnoha vývojových projektů vzniká kromě samotného vyvíjeného řešení také dodatečný kód, který zodpovídá za správnost primárního kódu. Jde o sadu testů, které ověřují, že nový kód funguje bez chyb a neovlivňuje negativně již existující funkcionalitu dodávaného řešení. Tyto testy mohou být spouštěny manuálně vývojáři, ale také automatizovaně pomocí externích nástrojů. K automatickému spuštění pak dochází na základě definovaných událostí, typicky například při nahrání nového kódu do hlavní větvě báze kódu.

analyze

Automatické sestavení

Sestavením aktuální verze kódu vzniká sada artefaktů, které jsou nasazovány na cílové prostředí a tvoří výstup dodávaného softwarového řešení. Mezi tyto artefakty patří zejména tzv. balíčky kódu, případně další doplňující, například konfigurační, či jiné soubory. Samotné sestavení již probíhá pomocí sady skriptů, které vytvoří všechny požadované artefakty. Pomocí CI/CD lze tento proces zautomatizovat na základě definovaných událostí, obdobně jako u automatizovaných testů. Příkladem spouštěcí události automatizovaného sestavení může být merge kódu do produkční větve báze kódu.

teamwork

Automatické nasazení

Poslední částí spadající do CI/CD je automatické nasazení. Ve chvíli, kdy jsou sestaveny všechny artefakty, je dalším krokem jejich distribuce na cílové prostředí. V návaznosti na daný projekt a typy jednotlivých výstupů se může lišit i způsob distribuce. Od kopírování souborů až po složitější sadu kroků, která musí být dodržena v daném pořadí. Distribuce může být zajištěna opět manuálním provedením požadovaných kroků na cílovém serveru, nebo automatizací pomocí některého z externích nástrojů.

deployment

Nástroje CI/CD

Ruku v ruce s narůstajícím počtem organizací přecházejících na řízení dodávek pomocí agilních principů, roste také počet CI/CD nástrojů, které tyto principy podporují.

Mezi ty nejznámější a nejlépe hodnocené patří:

Výběr CI/CD nástroje

Při rozhodování, které CI/CD nástroje využít, je třeba zvážit více faktorů od podpory systému pro správu verzí kódu až třeba po možnosti integrace s dalšími nástroji.

Podpora systému pro správu verzí kódu

Už jsme zmínili, že správa verzí kódu (SCVM) je základním stavebním kamenem CI/CD. Je tedy nezbytné vybírat takový nástroj, který podporuje vámi používaný SCVM nástroj. V případě, že používáte méně běžný, či dokonce nějaký specifický nástroj pro správu verzí, je vhodné zvážit migraci svojí báze do jiného, rozšířenějšího nástroje.

Mezi nejpoužívanější platformy pro správu kódu a repozitářů patří:

  • Bitbucket
  • GitHub
  • SourceForge

Z cloudových služeb pak:

  • AWS CodeCommit
  • Google Cloud Source Repositories

Integrace s nástroji třetích stran

Ještě větší užitek přinášejí CI/CD platformy, pokud je propojíte s dalšími nástroji používanými v rámci celého vývojového cyklu. Díky integraci na nástroj pro správu a řízení požadavků (např. Jira Software) můžete automaticky měnit požadavkům, nebo například celému sprintu stav na základě nasazení odpovídající části kódu na prostředí. Propojením na analytické nástroje zas můžete sbírat z CI/CD nástroje analytická data a vyhodnocovat výkonnost vašeho týmu.

integration

On-premise vs. Cloud

Jedním z dnes již standardních faktorů rozhodování při pořizování nové technologie obecně je, zda chcete provozovat a spravovat danou technologii sami, nebo v cloudu jako službu. Kromě běžných otázek, zda máte kapacitu pro správu daného nástroje, zda data v daném nástroji nesmí opustit vaši síť, nebo zda chcete mít možnost si dané řešení přizpůsobit vlastním vývojem, je třeba vzít v potaz také možnosti daných CI/CD platforem. Některé platformy nabízí možnost on-premise instalace (Bamboo, Jenkins), jiné naopak běží pouze vzdáleně v cloudu (Bitbucket Pipelines, Google Cloud Source Repositories). V kontextu propojení CI/CD nástrojů s Jira je třeba ještě vzít v potaz, zda používáte on-premise, nebo cloud verzi Jira. Některá rozšíření integrující daný CI/CD nástroj s Jira jsou totiž dostupná pouze pro cloud verzi.

Podpora kontejnerizace

Kontejnerizace umožňuje distribuovat kopie celých aplikací v jednotné nezměněné formě napříč různými prostředími. Tento přístup zbavuje problémů souvisejících s různými závislostmi aplikace na konkrétním běhovém prostředí. Kontejnerizaci umožňují nástroje jako je Docker, nebo Kubernetes. Moderní CI/CD nástroje podporují kontejnerizaci v rámci CI/CD procesu tak, aby bylo zajištěno jednotné prostředí, na kterém je kód pomocí CI/CD nástrojů spouštěn a ověřován.

worldwide-shipping

CI/CD nástroje v kontextu Atlassianu

Pokud již ve vaší organizaci používáte Jira SW pro řízení vývoje software a zvažujete buď nové zprovoznění celého CI/CD procesu, nebo zapojení Jira SW do již existujícího procesu, máte na výběr více možností.

Bamboo

V případě, že ještě nepoužíváte žádnou CI/CD platformu, jako první se poměrně logicky nabízí využít Bamboo z dílny Atlassian, který nabízí nejlepší integraci s Jira a Bitbucket.

Bitbucket Pipelines

Bitbucket Pipelines obdobně jako Bamboo pochází od Atlassian a jde o rozšíření instalované přímo do Bitbucket. Na rozdíl od Bamboo jde o cloudovou službu, kterou lze využít pouze v případě, že již používáte Bitbucket v cloudu.

Jenkins

Pokud již používáte tento asi nejrozšířenější CI/CD nástroj, nebo jej z jiných důvodů upřednostňujete před řešením od Atlassian, i zde existuje poměrně dobrá možnost integrace na ostatní Atlassian nástroje. Přímo od Atlassian je k dispozici appka Jenkins integration for Bitbucket Server, která umožňuje automatizaci spouštění buildů v Jenkins na základě definovaných spouštěčů v Bitbucket, či zobrazení detailních informací o buildech přímo v rozhraní Bitbucket.

Atlassian dále nabízí appku pro propojení Jenkins také přímo s Jira SW. Jde o Jenkins for Jira (official), která umožňuje zobrazování informací o buildech přímo v Jira issues. Tato appka je však dostupná pouze pro cloud verzi Jira.

Další možností je appka Jenkins Integration for Jira [Marvelution B.V.] umožňující vizualizaci informací o buildech v Jira issues, a také umožňující spouštění buildů přímo z Jira issues. Tato appka je dostupná jak pro on-premise, tak pro cloud verzi Jira. Aktuálně stále ještě v beta-verzi nabízí společnost Marvelution B.V. rozšíření pro tuto appku o automatizační pravidla Jenkins Integration Automation for Jira.

Circle CI

Circle CI nabízí vlastní appku do Jira CircleCI for Jira i do Bitbucket Continuous Integration for Bitbucket. Zatímco rozšíření pro Jira je dostupné pro on-premise i cloud verzi, rozšíření pro Bitbucket je dostupné pouze pro cloud.

TeamCity

I pro TeamCity existuje integrační appka s Jira SW TeamCity Integration for Jira, která umožňuje real-time zobrazení informací o nasazení částí kódu propojených s konkrétními Jira issues. Appka je dostupná jak pro on-premise, tak pro cloud verzi Jira.

Travis CI

Travis CI integration for Jira přináší obdobné možnosti jako appky pro integraci zmíněné u předešlých nástrojů. Tedy zejména viditelnost stavu buildů přímo v jednotlivých Jira issues. Appka je dostupná pouze pro cloud verzi Jira.

Azure Pipelines

Azure Pipelines for Jira rovněž nabízí možnost zobrazení detailu o stavu nasazení v jednotlivých Jira issues a také opačný pohled a odkaz z pipelines do Jira issue, což lze mimo jiné dobře využít pro jednoduché generování release notes pro každé nasazení. Appka je dostupná pouze pro cloud verzi Jira.

Shrnutí

V článku jsme si ukázali jakým způsobem podporuje průběžná integrace a průběžné doručení principy agility, které jsme zařadili do skupiny vývoje a doručení software.

Z pohledu provozování CI/CD v kontextu Atlassian nástrojů lze velmi dobře využít kombinaci nástrojů přímo od Atlassian (Jira, Bitbucket, Bamboo). Avšak není to jediná z cest, kterou se lze vydat. Dobře podporovaná je také integrace mezi Jira a Jenkins, případně GIT/GitHub. V případě ostatních nejčastěji používaných CI/CD nástrojů jsou již možnosti o něco více omezené, ale existují. I když v některých případech pouze pro cloud verzi Jira.

Pokud máte zájem o licenci na jakýkoliv Atlassian produkt (ať už Cloud nebo Server), podívejte se na stránku Licence Atlassian nástrojů, kde nás můžete rovněž kontaktovat. Jsme schopni Vám poskytnout dodatečnou partnerskou slevu. V případě zájmu o konzultaci ke kterémukoliv produktu nás kontaktujte prostřednictvím kontaktního formuláře na stránce konzultace a implementace.

V příštím příspěvku z této série se podíváme na poslední skupinu principů agility v rámci Atlassian nástrojů, kterou je Spolupráce.

Miroslav Suchopar Miroslav Suchopar

Atlassian Solution Architect

Mirek se jakožto bývalý IT projektový manažer věnuje primárně oblasti řízení projektů a portfolia. Navrhuje a implementuje související procesy pomocí Atlassian nástrojů s důrazem na efektivitu a uživatelskou přívětivost. V poslední době se zaměřuje zejména na oblast řízení projektů dle principů agility.

Komentáře

Podobné články

Nechte nám na sebe kontakt a naši odborníci se vám ozvou. Neradi píšete? Kontaktujte experta na telefonním čísle +420 602 507 062

Důvěřují nám tyto firmy