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.

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

Ladislav Prskavec pracuje jako leader SRE Teamu v Oracle Apiary. V současné době jej kromě programování v NodeJS a Ruby baví především další jazyky jako je Go Lang, R a nástroje pro automatizaci infrastruktury jako Ansible a Docker. Autor je aktivní evagelista v používání verzovacích systémů a continuous delivery.

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 6

Přehled komentářů

Robin Pokorný
Zdenek Henek Re:
Ladislav Prskavec Re:
Tomáš Vála Re:
ad Gitlab
Ladislav Prskavec Re: Gitlab
Zdroj: https://www.zdrojak.cz/?p=8641