Přejít k navigační liště

Zdroják » Různé » Chcete vždy Git v cloudu, nebo ho máte raději plně pod kontrolou?

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

Články Různé

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.

Stash

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ě.

stash02

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í.

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í.

Komentáře

Subscribe
Upozornit na
guest
6 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Robin Pokorný

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á)

Zdenek Henek

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

Tomáš Vála

Před časem jsem instaloval Stash shodou okolností též na CentOS a relativně v pohodě, takže vytrvat ;-)

ad

a co tak skusit gitlab?

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.