/ Development

Idea to Production na CraftMania.cz

Každého určitě zajímá, jaké to je spravovat tak velký server jako je CraftMania.cz. Desítky až stovky serverů. Přece musí existovat způsob, jak spravovat všechny pluginy bez otravného nahrávání po jednom na každý server zvlášť. Ano existuje!

V tomto tématu se budou vyskytovat názvy, kterém nebudeš muset rozumět. Vše bude dostatečně vysvětleno, aby to pochopil opravdu každý.

Git

Každý kdo se pohybuje v oblasti programování určitě zná git. Co to ten git je? Je to pokročilý správce source kodů. Původně vznikl na revizování verzí pro Linux ale kvůli možnostem se rozšířil prakticky kamkoliv. Eviduje změny/revize/verze a podporuje všechny druhy typy programovacích jazyků i textových souborů (:D). Ve zkratce prostě správce source kodů.

Jedním z nejpoužívanějším gitem je GitHub. Jedná se o primárně určený veřejný Git server. Za menší poplatek lze mít i privátní source avšak k čemu, když existují lepší s více funkcemi.

GitLab

Zde jsme na správné adrese. CraftMania.cz používá GitLab. O co se jedná? Prakticky o to samé co GitHub ale v lepším měřítku. Jednou z hlavních výhod je, že je kompletně zdarma (Community Edition). Pokud vlastníš VPS/VDS můžeš si ho sám hostovat a mít tak zcela privátní Git pro sebe nebo skupinu developerů.

Proč používáme GitLab a né třeba Bitbucket nebo GitHub? Důvodů je mnoho, jedním z nich jak jsem již psal, je že si to můžeme hostovat sami. Další výhodou je ohromné množství integrací od Mavenu po x dalších. Dashboard pro přehled kdo co opravuje. Pokročilý Issue tracker, který měří dokonce i čas jak dlouho trvala oprava od zapsání bugu, po následný export na server.

Maven — Build manager primárně určený na Java projekty. (Sestavuje .jar)
Issue tracker — Stránka na které jsou vypsané všechny současné (ne)opravené bugy v danném projektu.

Takže jsme si představili, kde a jak ukládáme source. Nyní je na čase ukázat jak vše vlastně funguje a v další části vše prakticky.

1_ZnThTYSJCoRKj_5ACD8nqQ

Idea to Production

Každý projekt na světě má svůj plán. Každá firma má svůj plán kde seženou látky, kde to sestrojí, jak to dopraví a následně feedback nebo-li peníze a pochvala kvality (:D).

Plány jak “doručovat” svůj produkt jsou dobré, jelikož pak můžeš sledovat jak vše probíhá, rychlost, kvalitu, bugy (chyby), vylepšení atd. My zde máme také plán “jak doručovat” plugin na server.

1_psnyHoLyjuRYzuimaNkAdA

Idea

Každý nápad někde vzniká, v našem příkladě budeme chtít do výše uvedeného CraftManager přidat nové statistiky Stats. Minecraft má mnoho statistik, tak proč je rovnou neukládat do MySQL.

Issue

Další částí jsou Issue, tato část má mnoho významů. Prvním z nich je seznam plánovaných změn. Chceme něco změnit v další verzi? Vytvoříš issue a přidělíš mu tag “Next realese”. Dalším významem je evidování bugů.

Plan (Dashboard)

V této části dochází k dělení problémů. Pokud na projektu pracuje víc lidí, ten kdo chce daný problém vyřešit označího a přesune k sobě na Dashboard. Tím je feature/bug označen a tím pádem nemohou dva lidé (i víc) dělat jednu věc.

Code

Hlavní část všechno nebo-li programování a tvoření obsahu.

Test

Zde přichází na řadu již zmiňovaný Maven. Source s novým dodatkem (commitem) zkopiluje, otestuje a vytvoří jar popřípadě jiné možnosti jak si co nastaví.

Review

Tato část řeší testování, většinou jsou všechny programy/pluginy atd. testované než jdou k uživatelům. Je to tzv. dolaďování posledních bugů.

Staging

V této části přichází na řadu mnoho dalších nástrojů. Například informování o stavu na Slash, zasílání source na jiný gity atd.

Production

Finální fáze, kdy je plugin/program vypuštěn do světa.

Feedback

Nakonec nesmí chybět odezva v podobě nalezených chyb a problémů.

Typy ITP

Jak jsme si uvedli výše, každá část má svůj proces existují ale různé typy jak tyto procesy provádět.

Nejběžnějším příkladem (obrázek níže), je přidáváním nových věcí rovnou do větve Master. Každý pracující developer na projektu si překopíruje source k sobě, provede změny a pak je rovnou nahraje do Master. Druhý developer dodělá svoje a narazí na problém, že developer první pozněnil source toho co on upravoval. Jedna z hlavních nevýhod tohoto typu. Ovšem, pokud někdo pracuje na projektu sám, je nesmyslné aby si projekt nějak větvil. Zmíněná nevýhoda je pouze 2+ lidech.

1_qmveVUaADvD_AdevxvSXXA

Feature Branch

Tento typ procesu provádíme na CraftManii. Jedná se o to, že je u každého projektu 1 hlavní branch Master. Každý pracující developer si k sobě překopíruje source, vytvoří novou větev (Branch), pojmenovanou většinou po tom co opravuje. Pokud se jedná o opravy, tak se píše datum. Dnešní formát neuveřejněných oprav by vyladal takto wip-231216. Ihned je jasné, co je to za Branch. WIP znamená Work In Progress, tedy nedokončené, zbylé číslice jsou datum bez teček. Pokud je oprava dokončená, odebere se “wip” a je vytvořen Merge Request. Poté již jde hlavní developer, zkontroluje a klikne na Merge a změny se zavedou do hlavní větve Master.

Merge Request — Je žádost o zavedení Feature (na obrázku) do Master větve.
Branch — Je v překladu větev a značí určitý vývoj pluginu/programu.

1_PxvLaMs6uuq6lyBsIrq1lQ

GitFlow

Dalším typem je GitFlow. Jedná se o největší typ, který má o jednu či více větví navíc. Daný plugin/program je mnohonásobně více testován, kontrolovat, kompilován pro různé typy systémů, verzí jazyka atd. Základem je větev Master, ve které jsou již “Stable” (stabilní) updaty. Pod ní je větev Develop, do ní jsou přimíchávány doplňující/opravné větve (feature). Tento typ najdeme u největších projektů, jedním z nich je třeba GitLab CE. Tento typ je výhodný v případě, že na danném projektu pracuje klidně až 1000 lidí.

1_WGb9b9hRpgNHJF6jFR-YwQ

Continuous delivery

Výše jsme si uvedli Continuous Integration a jak funguje Idea to Production. Tedy jak funguje nápad — napojení — zavedení ve světě Gitu. Nenapsali jsme si ale ještě, jak funguje tzv. doručování pluginů/programů. Přece to neděláme zbytečně!

Buddy

Jedním z prvkem CD (Continuous delivery) je prvek zpracování/doručení. Existují různé typy od Heroku, Gitlab CD, Circle CI, Jenkins, Travis CI a mnoho dalších.

Na CraftManii používáme Buddy. Primárně je placený ale existuje i varianta pro VPS — Buddy GO. Co tedy dělá? V případě, že já povolím Merge Request, Buddy to zjistí a automaticky si stáhne hlavní Master source. Zkompiluje, oznámí a nahraje na příslušné servery. Tomu se říká doručení. Buddy vše provádí automaticky nebo v určitých intervalech. Dalším příkladem může být náš automatický update Spigot serverů na 1.11.2 (aktuálně nejnovější). Každé ráno ve 3h, se automaticky stáhne, zkompiluje, zkontroluje a nahraje opět na příslušné servery. Stejný princip ale jinak. Tomu se říká Continous delivery. Zkompilovaný source doručujeme do funkčního oběhu.

1_tVAohWjx-EabB0i9SYHuyA

Slack

Další částí v podstatě i poslední v ITP (Idea to Production) je Feedback. Na Slack tedy komunikační službu nám bot z Buddy vypisuje zda updaty proběhly správně. Máme tak přehled o všem jak a co funguje.

1_tCfnNY2y11Om64rMd_eZzA

Shrnutí

Vysvětlili jsme si zde základy Idea to Production nebo-li Continuous Integration a Continuous Delivery. Propojili jsme mnoho služeb, programů, které nyní pracují dohromady a tvoří tzv. Developer network. Máme ihned přehled, kdo co opravuje/spravuje, kde je chyba a různé verze pluginů.