Chcete vždy Git v cloudu, nebo ho máte raději plně pod kontrolou?

Před několika lety, když jsme v naší firmě přecházeli na Git, řešili jsme, jak ho vhodně začlenit do infrastruktury, a zvolili jsme řešení založené na softwaru Gitolite. Dnes ale máme více možností a podrobněji se podíváme na Atlasian Stash.
Git můžete hostovat na vlastním serveru, stačí mít nainstalovaného klienta stejně jako na vašem počítači. Důležité je ale řešit v infrastruktuře přístup pro více uživatelů, zakládání a mazání repositářů.
Máte několik možností, které tu ukážeme. Buď použijete samotné ssh, případně jednoduchý nástroj jako je gitolite, a nebo komplexnější nástroj, který má i grafické rozhraní jako je Stash, Github nebo Gitlab.
SSH
Pokud potřebujete Git sami pro sebe, stačí mít server přístupný přes SSH. Ve svém domovském adresáři si založíte adresář, kde budou uloženy repositáře a nové si musíte vždy založit ručně na serveru.
git init --bare repoName
Výhodou tohoto řešení je jeho jednoduchost. Pro usnadnění si uděláme funkci v shellu, která se připojí na server a repositář vytvoří.
function createMyRepo() {
ssh user@hostname "git init --bare ~/repos/$1"
}
Obdobně se dají řešit i další potřebné funkce. Je to celé trochu pracné, proto se podíváme po nástrojích, které nám správu usnadní.
Gitolite
Aktuálně je Gitolite ve verzi 3. Gitolite nainstalujete buď z balíčku vašeho operačního systému (podporuje unix platformy) nebo ze zdrojových kódů.
Celá konfigurace probíhá pomocí repositáře gitolite-admin, které si administrátor naklonuje a přidává ssh klíče uživatelů a nastavuje práva pro jednotlivé repositáře. Pokud přidá nový repositář, gitolite ho automaticky založí. Mazání a přejmenování se musí obstarat ručně, stejně jako nastavováni hooku pro jednotlivé repositáře.
Pokud máte repositářů hodně (100+), začíná být správa občas nepřehledná a je dobré mít repositáře aspoň podle abecedy a vhodně nastavené skupiny. Případně to řešte přes include konfiguračních souborů. Všechny repositáře nastavujte přes skupiny a ne na uživatele!
Existuje snaha vytvořit nástroj pro správu klíčů v Pythonu, gitolite manager, ale nevypadá to zatím na stabilní verzi.
Gitolite má implementované personální větve, které se definují jednoduše:
repo mujProjekt
R = @all
RW = @devs
RW+ personal/USER/ = @devs
Povšimněte si, že v gitolite se dají základní práva nastavovat do třech úrovní. Jsou zde speciální práva (C,D) pro vytváření repositářů a mazání. Plus můžete použít ještě virtuální reference (VREF).
- R – čtení
- RW – čtení, zápis, „rychle vpřed“ (fast forward)
- RW+ – čtení, zápis, jakýkoliv push (např. git push –force)
Personální větve využíváme na ukládání rozdělané práce, která je jako záloha, kdyby vývojáři odešel notebook, onemocněl a někdo by to po něm měl převzít apod.
Kromě SSH, které mně přijde jednoduché na nastavení, můžete použít podle dokumentace i smart http.
Další informace o Gitolite najdete také v článku Deploy aplikace přes git.
Atlassian Stash
Tento moderní nástroj vznikl podle mě jako levnější konkurence Github Enterprise po koupi Bitbucketu firmou Atlassian.
Rodina produktů se rozrostla, a pokud od nich používáte více nástrojů jako my, tak vás ani tento nijak nepřekvapí. Známé jsou hlavně bug tracker JIRA, group chat HipChat a wiki Confluence.
Velkou výhodou je jednoduché napojení na Active Directory (AD) a JIRA, které používáme. Napojení na AD má jen nevýhodu, že uživatele převezme včetně jmen a emailů a používá je pro práci s Gitem, pokud máte jinak pojmenovaného uživatele v .gitconfig, vznikají nechtěné duplicity.
Dnes používáme pro Code Review (CR) FishEyE a Crucible, který bychom chtěli nahradit právě Stashem. Crucible máme už jen projektech v gitu, všechny živé věci ze Subversion byly dávno převedeny.
Dnes se vytváří Code Review (CR) ručně nebo pomocí smart commitů, ale není to ideální. Já mám v oblibě workflow, na které jsem zvyklý z open source projektů, kdy se hotová a otestovaná věc merguje do masteru, a to pomocí pull requestu, kde se CR dělá přirozeně.
Ale toto workflow není užitečné, pokud se nedá napojit na continuous integration server. Github používá Travis CI a my používáme Jenkins a Atlasian samozřejmě podporuje jejich Bamboo. Stash má vestavěné REST API, které nám umožní notfikovat Stash o tom, zda build prošel a zda například feature branch projde unit testy a zda i po merge to projde také, apod.
Atlasian píší zajímavý blog o svých produktech a gitu obecně, zde bych uvedl odkazy na pár zajímavých článků k nahlédnutí.
- Forking in the Enterprise
- Customize your workflow with Git hooks
- Pull Requests, Issues, Builds – Integrated
Pokud budete přecházet, doporučuji důkladné odzkoušení, protože se může stát, že stávající verze nepodporuje to, co běžně používáte a ani by vás to nenapadlo.
Pár drobností z našeho interního testování (verze 2.4.2):
- Pokud používáte někde v aplikaci
git archive
, tak můžete mít problém, ve stávající verzi totiž tato funkcionalita nefunguje. My to používáme na vytažení podadresáře s testy pro náš testovací nástroj. - Force push nelze nastavit zatím na jednotlivé větve, ale jen na celé repository.
- Při nastavení práv na větve se stává, že zahlásí chybějící licenci. Přitom chybí jen nastavený SSH klíč v profilu uživatele – když ho nastavíte, vše funguje.
- O nemožnosti přepsat email a jméno, pokud to máte nastavené na Active Directory, jsem se už zmiňoval.
Porovnání nákladů pro komerční řešení
Pro porovnání jsem zvolil tyto parametry, které odpovídají zhruba našemu týmu (100 repositářů a 55 uživatelů).
Software | Cena za licence |
---|---|
Github Enterprise | 15 000 USD / rok |
Atlassian Stash | 6 000 USD jednorázově |
Gitolite | 0 USD / rok |
Gitlab | 0 USD / rok |
Gitorious | 0 USD / rok |
Cloudová služba | Poplatky |
---|---|
Bitbucket | 1 200 USD / rok |
Github | 2 400 USD / rok (Platinum) |
Beanstalk | 1 200 USD / rok (Platinum) |
Pro malé týmy do 10 uživatelů se vyplatí služby od Atlasianu, protože za ně zaplatí do 10 USD měsíčně. Například skvělý HipChat pro IM v týmu je zdarma do 5 uživatelů. Pokud řešení od Atlassianu koupíte, můžete si obvykle zaplatit za polovinu nákupní částky support ve kterém jsou upgrady na novější verze. Jen mi přijde škoda, že nenabízí množstevní slevy.
Cloudové uložení zdrojových kódů je výrazně levnější, a proto pokud se nebojíte o spolehlivost a data, tak se dá využít i těchto služeb.
Služeb existuje samozřejmě víc, než tu uvádím, ale je dobré preferovat ty nejznámější. Pokud máte část software jako open source a chcete, aby vám do něj někdo přispíval, je dnes Github jasná volba.
Git workflow a jejich podpora v nástrojích
Celý proces vývoje a deploymentu je stěžejní ve volbě nástroje, který chcete používat.
Ve firmě do toho potom vstupují i bezpečnostní hlediska, zabezpečení zdrojových kódů a další právní aspekty, které nemůžete vždy ovlivnit. Potom samozřejmě musíte vědět, že náklady jsou adekvátní tomu, co za ně dostáváte.
Jsou i další nástroje jako Gitlab, který vypadá v posledních verzích velmi dobře, ale s ním nemám osobní zkušenost, tak podrobnosti neuvádím. Pokud ho používáte, napište nám do komentářů, jak jste s ním spokojeni a zda vám něco nechybí.
Soukromé repozitáře mám na svém VPS přístupné přes čisté SSH. Vzhledem k tomu, že nového přispěvatele přidávám jen zřídka, není správa vůbec náročná. Navíc se nemusím učit nic nového a práva nastavuji „klasicky“ unixově. Tato cesta mi příjde zvláště vhodná ve chvíli, kdy uživatelé mají SSH přístup tak jako tak. Velmi praktické je i použití git-shell jako login shellu těm, kterým chci umožnit jen git přístup.
Nedávno jsem chtěl vyzkoušet právě Stash (do 10 uživatelů za $10 i na vlastní stroj!). Asi po hodině, kdy jsem se snažil nainstalovat Javu a další závislosti do CentOS, jsem byl tak otráven, že jsem celou operaci přesunul na neurčito. (Ze svého okolí jsem ovšem slyšel, že instalace na Windows server je velmi jednoduchá)
Zkuste gitblit,
je to teda taky java, ale rozhodne to neni tak slozite jak popisujete a neomezuje vas nic.
Ukazka gitblit https://demo-gitblit.rhcloud.com/
Budete potrebovat javu, ale tu nemusite instalovat z repozitare. je k dispozici na java.oracle.com a http://gitblit.com/setup.html
Vypada to celkem zajimave, skoda ze nepodporuji ssh protokol.
Před časem jsem instaloval Stash shodou okolností též na CentOS a relativně v pohodě, takže vytrvat ;-)
a co tak skusit gitlab?
Mame ho na seznamu hned po Stashi, cekal jsem hlavne dokonceni pluginu do Jenkinsu, ktery umoznuje kontrolu merge requestu v Gitlabu. Pripadne zkusenosti napisu ale par mesicu testovani potrva.