We make you happy with exceptional design, brilliant
videos, appealing websites and fruitful apps.

2day Blog

18/01
2012

Jednoduchý GIT workflow

Dnes by som vám rád predstavil jednoduchú produkčnú schému, ktorú používame v 2day. Táto schéma pozostáva z jedného produkčného servera, jedného testovacieho servera a zopár vývojárskych staníc, v závislosti od počtu kóderov, ktorí pracujú na projekte.

Popis schémy

Ako je možné vidieť na obrázku nižsie, každý vývojár má svoju vlastnú pracovnú kópiu projektu (vrátane databázy). Testovací server funguje ako pred-produkčné prostredie, v ktorom sú vykonávané všetky testy pred tým, ako je kód nasadený do ostrej prevádzky na produkčnom serveri. Dôležitou vlastnosťou takejto schémy je to, že po úvodnej konfigurácii sa už nerobia žiadne zmeny priamo v kóde na testovacom, alebo produkčnom serveri.

Nastavenie

Predpokladajme, že máme GIT nainštalovaný na všetkých počítačoch, ktoré majú byť súčasťou vývojovej schémy a zároveň máme nachystaný kód našej web stránky na vývojárovom počítači. Ako prvý krok je potrebné urobiť z tohto kódu GIT repozitár (repository). Na vývojárovom počítači spustíme:

$cd website
$git init
$git add .
$git commit -m "Initial commit"

Tieto príkazy inicializujú GIT repozitár (git init), pripravia všetky súbory na zápis do repozitáru (git add .) a následne ich do repozitáru uložia (git commit). (Toto je veľmi zjednodušený príklad, detailami o príprave súborov na zápis a o nastavení ignorovania súborov sa budeme zaoberať inokedy). Keď máme náš lokálny repozitár nastavený, môžeme prejsť ku konfigurácii vzdialeného repozitáru na testovacom serveri. Pre nastavenie potrebujeme SSH prístup na testovací server, ideálne aj s nastavenými ssh kľúčmi, aby sme namuseli zadávať heslo pri každom pripojení. Na testovacom serveri teraz vytvoríme GIT repozitár, ktorý bude presným obrazok nášho lokálneho repozitáru:

$ mkdir website.git && cd website.git
$ git init --bare

Následne musíme definovať post-receive hook, ktorý zabezpečí, že po uložení kódu do vzdialeného repozitára bude tento kód automaticky zapísaný aj do pracovného adresára nášho webservera na testovacom serveri (tento adresár musí existovať, GIT ho nevytvorí za nás!):

$ mkdir /var/www/www.mywebsite.com
$ vim hooks/post-receive

GIT_WORK_TREE=/var/www/www.mywebsite.com git checkout -f

$ chmod +x hooks/post-receive

Teraz môžeme naše dva repozitáre spojiť (git remote add) a nahrať obsah lokálneho repozitára na testovací server (git push). Na vývojárovom počítači spustíme:

$ git remote add test ssh://devtest.server.com/home/
unluckyPete/website.git
$ git push test +master:refs/heads/master

Testovací server teraz obsahuje úplne presný obraz nášho lokálneho repozitáru.

Pre nastavenie produkčného serveru postupujeme rovnako, akurát v predchádzajúcich krokoch nahradím Testovací server za Produkčný server a Vývojárov počítač za Testovací server.

Pridanie nového vývojára do schémy

Predstavme si, že nám na projekte pribudol nový vývojár, ktorý potrebuje svoju lokálnu kópiu kódu, aby mohol začať pracovať. Jediné, čo musí urobiť je stiahnuť repozitár (pull) z testovacieho servera na jeho lokálny počítač, pridať si testovací server ako vzdialený repozitár a môže začať!

Workflow

Nová funkcionalita na ktorej náš vývojár pracoval je hotová a pripravená na nahranie do testovacieho prostredia. Prvá vec, ktorú musí vývojár urobiť je skontrolovať (fetch), či od jeho poslednej aktualizácie nenastali na testovacom serveri nové zmeny. Ak nejaké zmeny a spolu s nimi aj konflikty v kóde nastali a zmeny nie je možné spojiť automaticky, GIT vývojára vyzve, aby tieto konflikty vyriešil. Po vyriešení konfliktov a zapísaní zmien do lokálneho repozitára (commit) je kód pripraveńy na zapísanie na testovací server. Jediné, čo programátor musí urobiť je napísať  git push test a kód je automaticky nahraný do vzdialeného repozitára a zapísaný do pracovného adresára web serveru (vďaka post-receive hook-u). Ostatní vývojári získajú jeho zmeny pri ich najbližsej aktualizácii ich lokálneho repozitáru (fetch).

Ak boli všetky testy na testovacom serveri úspešné, môže byť kód zapísaný do produkčného prostredia. Na testovacom serveri stačí spustiť:

git push prod

Jednoduchšie to už nejde.

Výhody

  • Jednoduchosť. Tým, že po nastavení sa už nevykonávajú žiadne zmeny priamo v kóde na testovacom ani produkčnom serveri je možné predísť mnohým problémom. Zároveň je prenos kódu medzi jednotlivými vývojovými krokmi veľmi jednoduchý a rýchly.
  • Konzistentnosť. Vďaka tomu, že má každý vývojár svoju vlastnú pracovnú kópiu, nedochádza k nežiadúcemu prepisovaniu kódu. Zároveň je pri kód pri prenose vždy najskôr skomprimovaný, následne prenesený a potom naraz zapísaný v novom prostredí. Sú tak minimalizované chyby vznikajúce pri zápise súborov na server, ktorých dôsledkom sú biele stránky zobrazené používateľom.
  • Redundancia. Každý repozitár obsahuje kompletnú históriu verzií a zmien celého projektu, takže v prípade poškodenia alebo zlyhania niektorého repozitára je možné ho obnoviť z hociktorého iného. Dáta sú tak viacnásobne zálohované.

Pokiaľ sa vám na spravovanie GIT repozitára nepáči konzola, môžem vrelo odporučiť  Tower GIT client pre Mac.

Picard out.

p.

« Back to all posts