• No results found

SYST´EM PRO PR˚UBˇEˇZNOU INTEGRACI SOFTWARU

N/A
N/A
Protected

Academic year: 2022

Share "SYST´EM PRO PR˚UBˇEˇZNOU INTEGRACI SOFTWARU"

Copied!
73
0
0

Loading.... (view fulltext now)

Full text

(1)

SYST´ EM PRO PR˚ UBˇ Eˇ ZNOU INTEGRACI SOFTWARU

Diplomov´ a pr´ ace

Studijn´ı program: N2612 – Elektrotechnika a informatika Studijn´ı obor: 1802T007 – Informaˇcn´ı technologie

Autor pr´ace: Bc. Vojtˇech T˚uma Vedouc´ı pr´ace: Mgr. Jiˇr´ı Vran´y, Ph.D.

(2)

SYSTEM FOR SOFTWARE CONTINUOUS INTEGRATION

Diploma thesis

Study programme: N2612 – Electrotechnics and informatics Study branch: 1802T007 – Information technology

Author: Bc. Vojtˇech T˚uma Supervisor: Mgr. Jiˇr´ı Vran´y, Ph.D.

(3)

Tento list nahrad’te

origin´ alem zad´ an´ı.

(4)

Prohl´ aˇ sen´ı

Byl jsem sezn´amen s t´ım, ˇze na mou diplomovou pr´aci se plnˇe vzta- huje z´akon ˇc. 121/2000 Sb., o pr´avu autorsk´em, zejm´ena § 60 – ˇskoln´ı d´ılo.

Beru na vˇedom´ı, ˇze Technick´a univerzita v Liberci (TUL) neza- sahuje do m´ych autorsk´ych pr´av uˇzit´ım m´e diplomov´e pr´ace pro vnitˇrn´ı potˇrebu TUL.

Uˇziji-li diplomovou pr´aci nebo poskytnu-li licenci k jej´ımu vyuˇzit´ı, jsem si vˇedom povinnosti informovat o t´eto skuteˇcnosti TUL;

v tomto pˇr´ıpadˇe m´a TUL pr´avo ode mne poˇzadovat ´uhradu n´aklad˚u, kter´e vynaloˇzila na vytvoˇren´ı d´ıla, aˇz do jejich skuteˇcn´e v´yˇse.

Diplomovou pr´aci jsem vypracoval samostatnˇe s pouˇzit´ım uveden´e literatury a na z´akladˇe konzultac´ı s vedouc´ım m´e diplomov´e pr´ace a konzultantem.

Souˇcasnˇe ˇcestnˇe prohlaˇsuji, ˇze tiˇstˇen´a verze pr´ace se shoduje s elek- tronickou verz´ı, vloˇzenou do IS STAG.

Datum:

Podpis:

(5)

Abstrakt

Pr´ace se zab´yv´a problematikou pr˚ubˇeˇzn´e integrace softwaru a obecnˇe v´yvoje softwaru v t´ymu. V ´uvodu pr´ace jsou podrobnˇe pops´any vˇsechny n´astroje pr˚ubˇeˇzn´e integrace. Tedy verzovac´ı syst´emy, testov´an´ı softwaru a sestavovac´ı skripty. V druh´e ˇc´asti pr´ace je pops´an n´avrh a implementace vlastn´ıho syst´emu pro pr˚ubˇeˇznou integraci. Popis syst´emu se skl´ad´a ze 3 ˇc´ast´ı. Prvn´ı ˇ

c´ast popisuje grafick´e rozhran´ı pro ovl´ad´an´ı cel´eho syst´emu. Druh´a ˇ

c´ast se zamˇeˇruje na popis vlastn´ıho ˇreˇsen´ı pro vytv´aˇren´ı sestavo- vac´ıch skript˚u. Posledn´ı ˇc´ast struˇcnˇe popisuje komponentu auto- rizujic´ı uˇzivatele skrze protokol SSH ke vzd´alen´ym repozit´aˇr˚um.

C´ılem pr´ace je, aby ˇcten´aˇr porozumˇel a nauˇcil se pouˇz´ıvat autorem navrˇzen´y syst´em pro pr˚ubˇeˇznou integraci softwaru.

Kl´ıˇcov´a slova: pr˚ubˇeˇzn´a integrace, verzovac´ı syst´emy, testov´an´ı soft- waru, sestavovac´ı skripty

(6)

Abstract

Work is focused on prolematics of continuos integration and team software development. Introduction describes all tools of continuos integration. Means version control system, software testing and bu- ild scripts. In the second part of work there is described own imple- mentation of system for continuous integration. Description of sys- tem is divided in to three parts. Graphical interface for controling whole system id described in the first part. Second part describes own implementation of creating buildscripts. The last part descri- bes component which authorize users to access remote repositories throw SSH protocol. Mail goal of work is to explaim how created system for continuos integration works and explaim to reader how to use it.

Keywords: continuos integration, version control systems, software testing, build scripts

(7)

Podˇ ekov´ an´ı

Chtˇel bych podˇekovat Martinu Tak´aˇcovi za pomoc pˇri vytv´aˇren´ı syst´emu. D´ale bych chtˇel podˇekovat vedouc´ımu pr´ace Mgr. Jiˇr´ımu Vran´emu Ph.D., kter´y se m´e pr´ace ujal. V neposledn´ı ˇradˇe chci podˇekovat sv´ym bl´ızk´ym, kteˇr´ı mˇe podporovali bˇehem studia.

(8)

Obsah

Seznam obr´azk˚u . . . 10

Seznam zkratek . . . 13

1 Uvod´ 14 2 Pr˚ubˇeˇzn´a integrace 16 2.1 Verzovac´ı syst´em . . . 17

2.1.1 Repozit´aˇr . . . 19

2.1.2 Zivotn´ı cyklus verzov´ˇ an´ı . . . 21

2.1.3 V´yvojov´e vˇetve . . . 24

2.1.4 Zachytn´e h´aky . . . 25

2.1.5 Uchov´av´an´ı historie zmˇen . . . 26

2.1.6 Dobr´e zvyky pro pouˇz´ıv´an´ı verzovac´ıch syst´em˚u . . . 28

2.2 Pˇredstavitel´e verzovac´ıch syst´em˚u . . . 29

2.2.1 GIT . . . 29

2.2.2 Mercurial . . . 30

2.2.3 Bazaar . . . 30

2.3 Sestavovac´ı syst´em . . . 31

2.4 Testov´an´ı . . . 32

3 N´avrh vlastn´ıho ˇreˇsen´ı 35 3.1 Sezn´amen´ı se s problematikou . . . 35

3.2 N´avrh vlastn´ıho ˇreˇsen´ı . . . 36

(9)

4 Vlastn´ı ˇreˇsen´ı 38

4.1 Hockej . . . 39

4.1.1 Sestavovac´ı skript . . . 39

4.1.2 Katalog . . . 40

4.1.3 Definice . . . 41

4.2 Prestacio . . . 42

4.2.1 Repozit´aˇre . . . 43

4.2.2 Sestavovac´ı skript . . . 43

4.2.3 Hockej . . . 43

4.2.4 Uˇzivatelsk´e ´uˇcty . . . 43

4.3 Stas . . . 44

5 N´avod na pouˇz´ıv´an´ı a praktick´e uk´azky 46 5.1 Hockej . . . 46

5.1.1 Instalace . . . 46

5.1.2 Vytvoˇren´ı sestavovac´ıho skriptu . . . 46

5.1.3 Vytvoˇren´ı vlastn´ıho katalogu . . . 48

5.1.4 Uk´azka rozˇsiˇrov´an´ı definic . . . 50

5.1.5 Spuˇstˇen´ı . . . 51

5.2 Prestacio . . . 52

5.2.1 Instalace . . . 52

5.2.2 Repozit´aˇre . . . 52

5.2.3 Sestavovac´ı skript . . . 56

5.2.4 V´ysledek sestavovac´ıho skriptu . . . 64

5.2.5 Katalogy Hockeje . . . 66

5.2.6 Uˇzivatelsk´e ´uˇcty . . . 67

6 Z´avˇer 69 6.1 Sloˇzitost vytvoˇren´ı syst´emu . . . 69

6.2 Intuitivnost ovl´ad´an´ı . . . 70

6.3 Celkov´a funkˇcnost a moˇzn´e vylepˇsen´ı . . . 70

(10)

6.4 Syst´em jako volnˇe ˇs´ıˇriteln´y software . . . 71 6.5 Zhodnocen´ı . . . 71

(11)

Seznam obr´ azk˚ u

2.1 Velikost pˇr´ınos˚u pˇri pokroku . . . 19

2.2 Repozit´aˇr a pracovn´ı kopie . . . 20

2.3 Synchronizace dvou repozit´aˇr˚u . . . 20

2.4 Synchronizace dvou repozit´aˇr˚u . . . 21

2.5 Rozkop´ırov´an´ı repozit´aˇre . . . 22

2.6 Odesl´an´ı zmˇen do repozit´aˇre . . . 22

2.7 Pˇrid´an´ı ostatn´ıch zmˇen a odesl´an´ı . . . 23

2.8 Navr´acen´ı zmˇen . . . 23

2.9 Viditelnost v´yvojov´ych vˇetv´ı . . . 24

2.10 Vytvoˇren´ı odnoˇze . . . 25

2.11 Pˇr´ıklad z´achytn´ych h´ak˚u . . . 26

4.1 Sch´ema syst´emu . . . 38

4.2 Hockej katalogy . . . 41

4.3 Hockej - skl´ad´an´ı definic . . . 42

4.4 Menu . . . 42

5.1 Seznam repozit´aˇr˚u . . . 53

5.2 Pˇridat repozit´aˇr . . . 53

5.3 Detail repozit´aˇre . . . 54

5.4 Zmˇeny v repozit´aˇri . . . 55

5.5 Detail zmˇeny . . . 55

5.6 Pˇrid´av´an´ı katalog˚u . . . 56

5.7 Pˇrid´av´an´ı definice . . . 57

(12)

5.8 Definice file . . . 58

5.9 Nastaven´ı definice . . . 59

5.10 Ruˇcnˇe upraven´a definice . . . 60

5.11 Propojen´ı definic . . . 60

5.12 Dialog vytvoˇren´ı pˇr´ıkazu . . . 60

5.13 Pˇr´ıkaz . . . 61

5.14 Uk´azka sestaven´ı . . . 61

5.15 Uk´azka sestaven´ı . . . 64

5.16 V´ysledek sestaven´ı . . . 66

5.17 Seznam katalog˚u . . . 66

5.18 Detail katalogu . . . 67

5.19 Seznam uˇzivatel˚u . . . 68

5.20 Detail uˇzivatele . . . 68

(13)

Seznam zkratek

CI Continuous integration(Pr˚ubˇeˇzn´a integrace) FTP File Transfer Protocol

HTTPS Hypertext Transfer Protocol Secure

SVN Subversion

XML eXtensible Markup Language

IDE Integrated Development Environment

SSH Secure Shell(protokol pro zabezpeˇcenou komunikaci)

(14)

1 Uvod ´

Pokud se ohl´edneme do nejmladˇs´ıch dob naˇs´ı civilizace zjist´ıme, ˇze jiˇz praˇclovˇek pouˇz´ıval n´astroje, aby si ulehˇcil svoji pr´aci. Ve stˇredovˇeku si kaˇzd´y kov´aˇr vyr´abˇel n´astroje, pomoc´ı kter´ych mohl vyr´abˇet rychleji dokonalejˇs´ı v´yrobky. Dok´azal vy- produkovat v´ıce kvalitn´ıch v´yrobk˚u a uspokojit l´epe svoje z´akazn´ıky. Vytv´aˇren´ı n´astroj˚u, kter´e ulehˇc´ı pr´aci, se zd´a tedy b´yt v´yhodn´e. D´ıky mnoh´ym z tˇechto n´astroj˚u, dos´ahla naˇse civilizace velk´e technick´e ´urovnˇe.

Jedna z dneˇsn´ıch velmi d˚uleˇzit´ych profes´ı je programov´an´ı. I zde lid´e hledaj´ı n´astroje, pomoc´ı kter´ych by si svou pr´aci mohli usnadnit. Na rozd´ıl od povol´an´ı kov´aˇre se ovˇsem jedn´a o velmi mladou discipl´ınu. V posledn´ıch desetilet´ıch vˇsak z´ısk´av´a na rozmachu. S pˇr´ıchodem prvn´ıho elektronkov´eho poˇc´ıtaˇce ENIAC, kter´y byl dokonˇcen v roce 1946, se mnoh´e zmˇenilo. V t´eto dobˇe existovala pouze velmi ome- zen´a mnoˇzina vyj´ımeˇcnˇe nadan´ych jedinc˚u, kteˇr´ı dok´azali naprogramovat funkˇcn´ı aplikaci. Pokud aplikaci vyv´ıjel jeden ˇci dva lid´e, nebyl probl´em si pr´aci rozdˇelit.

Dnes se programov´an´ı pˇribl´ıˇzilo mnohem vˇetˇs´ı skupinˇe lid´ı. Nyn´ı m˚uˇze na jed- nom projektu pracovat i nˇekolik des´ıtek program´ator˚u. Pokud by kaˇzd´y pracoval na jin´e ˇc´asti k´odu, nenastal by ˇz´adn´y probl´em a s trochou nads´azky by se projekt mohl vyv´ıjet bez omezen´ı. M˚uˇze se vˇsak st´at, ˇze dva r˚uzn´ı lid´e pracuj´ıc´ı na odliˇsn´ych ˇc´astech aplikace. Budou potˇrebovat upravit tu samou knihovnu, protoˇze v n´ı byla chyba. Zde m˚uˇze vznikout konflikt, jestliˇze oba neopravili knihovnu naprosto sten´ym

(15)

zp˚usobem. Pokud se jedn´a o pˇrid´an´ı jednoho ˇr´adku, tak probl´em nenast´av´a. Pokud se vˇsak zmˇen´ı nˇekolik des´ıtek ˇr´adk˚u v jedn´e knihovnˇe, je prakticky nemoˇzn´e pr´aci obou spr´avnˇe propojit a ovˇeˇrit spr´avnou funkˇcnost.

Tato pr´ace se zab´yv´a problematikou pr´ace v´ıce lid´ı na jednom projektu. Jak vytvoˇrit moˇznost pˇridat do existuj´ıc´ıho projektu novou funkcionalitu aniˇz by doˇslo k rozbit´ı t´e st´avaj´ıc´ı.

(16)

2 Pr˚ ubˇ eˇ zn´ a integrace

Pro vysvˇetlen´ı pojmu pr˚ubˇeˇzn´a integrace (CI) je nejlepˇs´ı si uv´est pˇr´ıklad. Mˇejme tedy za ´ukol vytvoˇrit novou vlastnost do jiˇz existuj´ıc´ıho webov´eho projektu. Nejprve si uvedeme pˇr´ıklad postupu, kde bude pouˇzit´y syst´em pr˚ubˇeˇzn´e integrace nebo jeho ˇc´ast´ı a posl´eze pˇr´ıklad, kdy nebude vyuˇzito ˇz´adn´e ˇc´asti pr˚ubˇeˇzn´e integrace.

Pokud nepouˇzijeme ˇz´adn´e z ˇc´ast´ı pr˚ubˇeˇzn´e integrace, bude n´aˇs postup vˇetˇsinˇe program´ator˚u velmi dobˇre zn´am´y. Otevˇreme souborov´y manaˇzer a zkop´ırujeme si existuj´ıc´ı k´od projektu na sv˚uj poˇc´ıtaˇc. N´aslednˇe provedeme ´upravy na r˚uzn´ych kni- hovn´ach, do kter´ych pˇrid´ame nov´e vlastnosti pro n´aˇs projekt. Otevˇreme webov´y prohl´ıˇzeˇc a vyzkouˇs´ıme vˇsechny nov´e vlastnosti na lok´aln´ım poˇc´ıtaˇci. Pokud vˇse funguje spr´avnˇe, nakop´ırujeme pomoc´ı protokolu FTP(S) nebo protokolu SSH na server upraven´e soubory. Nyn´ı znovu zkontrolujeme ve webov´em prohl´ıˇzeˇci, zda vˇsechny naˇse nov´e vlastnosti funguj´ı. Je–li souˇc´ast´ı nov´ych vlastnost´ı i aktualizace datab´azov´eho sch´ematu, mus´ıme ruˇcnˇe datab´azi upravit. M˚uˇze zde nastat nˇekolik probl´em˚u. M˚uˇze to b´yt zapomenut´y upraven´y soubor, nezkontrolov´an´ı vˇsech ˇc´ast´ı, kter´ych se aktualizace t´ykala nebo nesmaz´an´ı vyrovn´avac´ı pamˇeti, kde jsou st´ale uloˇzen´a star´a data.

Nyn´ı pouˇzijeme n´astroje pro pr˚ubˇeˇznou integraci, kter´e pom´ahaj´ı zamezit pr´avˇe tˇemto chyb´am. V tomto pˇr´ıpadˇe budeme postupovat analogicky, ale budeme vyuˇz´ıvat n´astroje, kter´e n´am pr´aci ulehˇc´ı. Samotn´e n´astroje budou pops´any v dalˇs´ıch kapi-

(17)

tol´ach. Pro zkop´ırov´an´ı aktu´aln´ıho k´odu projektu na vlastn´ı poˇc´ıtaˇc vyuˇzijeme ver- zovac´ı syst´em, kter´y vytvoˇr´ı pracovn´ı kopii projektu. N´aslednˇe provedeme ´upravy v k´odu. Pokud n´aˇs projekt obsahuje jednotkov´e ˇci jin´e testy, n´astroje tyto testy au- tomaticky spust´ı pˇred odesl´an´ım nov´eho k´odu na server. Pokud nˇekter´y z test˚u bude hl´asit chybn´y v´ysledek v´ıme, ˇze nov´a vlastnost naruˇsila jiˇz existuj´ıc´ı k´od nebo ne- funguje spr´avnˇe. Verzovac´ı syst´em n´aslednˇe odeˇsle na server vˇsechny soubory, kter´e byly upraveny. Pokud aktualizace upravuje datab´azov´e sch´ema, tak i tyto zmˇeny jsou provedeny automaticky. M´ame tedy mnohem vˇetˇs´ı ˇsanci ´uspˇechu, ˇze naˇse nov´a vlastnost bude spr´avnˇe spuˇstˇena.

T´ımto by se dal velice kr´atce vysvˇetlit pojem pr˚ubˇeˇzn´a integrace. Nyn´ı si pop´ıˇseme jednotliv´e ˇc´asti, kter´e by mˇel syst´em pro pr˚ubˇeˇznou integraci podporovat.

2.1 Verzovac´ı syst´ em

Mˇejme situaci, kdy dva r˚uzn´ı lid´e maj´ı za ´ukol do existuj´ıc´ıho projektu pˇridat sv˚uj vlastn´ı obsah. Tento projekt m˚uˇze b´yt ku pˇr´ıkladu kniha. Nemus´ı se vˇzdy jednat o software. Kaˇzd´y si tedy na zaˇc´atku poˇr´ıd´ı kopii aktu´aln´ı verze. Prvn´ı z nich do- konˇc´ı pr´aci dˇr´ıve a na nˇekolik r˚uzn´ych m´ıst v knize pˇrid´a n´ahodn´e mnoˇzstv´ı nov´ych odstavc˚u a uprav´ı i ˇc´asti p˚uvodn´ıho textu, protoˇze obsahoval chyby. Druh´y ˇclovˇek dokonˇc´ı pr´aci jen o den pozdˇeji s t´ım, ˇze pˇripsal jeden odstavec na konec knihy.

Nejjednoduˇsˇs´ı ˇreˇsen´ı je vz´ıt pr´aci ˇclovˇeka, kter´y vytvoˇril v´ıce textu a jehoˇz pr´ace je v´ıce rozprostˇrena v cel´e knize a k n´ı pˇripojit nov´y odstavec na konec, kter´y vytvoˇril druh´y ˇclovˇek. Nyn´ı ˇz´adn´y probl´em nenast´av´a, protoˇze oba se dok´azali dohodnout, co kdo udˇelal. Bohuˇzel druh´y z nich zapomnˇel ˇr´ıci, ˇze opravil na zaˇc´atku knihy ´uvod, bez kter´eho odstavec na konci knihy nem´a smysl. Knihu vydaj´ı a tento nedostatek

(18)

objev´ı aˇz pot´e, co se zaˇcne kniha prod´avat. ˇCten´aˇri si povˇsimnou, ˇze posledn´ı ka- pitola ned´av´a smysl. Vydavatel knihy tedy zjist´ı, ˇze je v knize chyba a vyd´a nov´y v´ytisk. Bohuˇzel, uˇz vytiskl nˇekolik stovek v´ytisk˚u, kter´e obsahuj´ı chybu. Zkus´ı tedy nal´ezt lepˇs´ı proces kontrolov´an´ı pr´ace.

Kniha se nyn´ı opˇet nach´az´ı v aktu´aln´ım stavu (vˇsichni maj´ı stejnou kopii). Edi- tor˚u knihy zaˇcne pˇrib´yvat a zjist´ı, ˇze je lepˇs´ı si kaˇzd´y den poslat seznam zmˇen, kter´e kaˇzd´y z nich provedl. Tento syst´em je uˇz l´epe udrˇziteln´y, protoˇze jednou za den si vˇsichni do sv´eho rozpracovan´eho dokumentu nakop´ıruj´ı nov´e ˇc´asti. Dalˇs´ım pokro- kem je vyuˇz´ıv´an´ı sd´ılen´eho disku, kdy existuje jeden soubor na sd´ılen´em ´uloˇziˇsti a kaˇzd´y do nˇej m˚uˇze nar´az pˇrisp´ıvat. Jelikoˇz je aktu´aln´ı pr´ace vˇsech pˇrispˇevatel˚u na jednom m´ıstˇe, m´a smysl dokument v pravideln´ych ˇcasov´ych intervalech z´alohovat.

T´ım z´ısk´ame historii dokumentu a m˚uˇzeme se zpˇetnˇe pod´ıvat ,v jak´em stavu byl dokument minul´y t´yden.

Pokud k dosaˇzen´enu pokroku pˇrid´ame moˇznost kontrolovat, kdo jak´e zmˇeny udˇelal a v jak´y ˇcas, tak se dost´av´ame na ´uroveˇn nejz´akladnˇejˇs´ıho verzovac´ıho syst´emu.

Takov´ym syst´emem m˚uˇze b´yt napˇr´ıklad Subversion[1] (oznaˇcov´an zkratkou SVN), kter´y za n´as prov´ad´ı z´akladn´ı operace jako pˇrekop´ırov´an´ı aktu´aln´ı verze ze serveru na lok´aln´ı poˇc´ıtaˇc a z´aroveˇn i nahr´an´ı upraven´e verze zpˇet na server. Ke kaˇzd´e zmˇenˇe je moˇzn´e pˇridat i text, kter´y bude popisovat provedenou zmˇenu. Pokud udˇel´ame zmˇenu a nahrajeme ji na server, ostatn´ı uˇzivatel´e si ji mohou st´ahnout k sobˇe na lok´aln´ı poˇc´ıtaˇc a pokud se nejedn´a o kolizn´ı zmˇenu (dva pˇrispˇevatel´e nar´az upravili stejn´y ˇr´adek) bude zmˇena automaticky zakomponov´ana. Nyn´ı m´ame jiˇz velice siln´y n´astroj, kter´y dok´aˇze zajistit automatick´e pˇripojov´an´ı zmˇen mezi pˇrispˇevateli a za- znamen´avat, kdo co upravil. Poˇr´ad se ovˇsem jedn´a o chytˇrejˇs´ı sd´ılen´y disk, kter´y m´a vˇse d˚uleˇzit´e uloˇzen´e na jednom m´ıstˇe, proto se tento syst´em naz´yv´a centralizovan´y.

Vˇse je uloˇzeno na jednom centralizovan´em ´uloˇziˇsti, ke kter´emu mus´ıme m´ıt st´al´e pˇripojen´ı, pokud chceme projekt upravovat.

(19)

Vˇsechny tyto nedostatky odstraˇnuj´ı distribuovan´e verzovac´ı syst´emy[2]. Pˇrin´aˇsej´ı moˇznost pracovat bez pˇr´ım´eho pˇripojen´ı k centralizovan´emu ´uloˇziˇsti. Zmˇeny se mo- hou hromadit na lok´aln´ım poˇc´ıtaˇci a odeslat je na centr´aln´ı ´uloˇziˇstˇe aˇz v dobˇe, kdy je moˇznost se k nˇemu pˇripojit. M˚uˇzeme tedy udˇelat nˇekolik zmˇen a ty napˇr´ıklad na konci t´ydne odeslat, coˇz ovˇsem nen´ı dobr´y zvyk, jak bude pops´ano d´ale. Nejvˇetˇs´ı v´yhodou je distribuce zmˇen mezi vˇsemi pˇrispˇevateli. Kaˇzd´a instance (kopie, klon) m´a v sobˇe uloˇzen´e zmˇeny, kter´e provedli ostatn´ı pˇrispˇevatel´e. Je moˇzn´e tedy odv´aˇznˇe ˇr´ıci, ˇze nem´a smysl vytv´aˇret speci´aln´ı z´alohy na centr´aln´ım ´uloˇziˇsti, protoˇze na vˇsech poˇc´ıtaˇc´ıch je z´aloha kompletnˇe uloˇzen´a. Mezi nejzn´amˇejˇs´ı z´astupce distribuovan´ych syst´em˚u patˇr´ı GIT, Mercurial(Hg) a Bazzar(Bzr).

Obr´azek 2.1: Velikost pˇr´ınos˚u pˇri pokroku

2.1.1 Repozit´ aˇ r

Nyn´ı knihu z prvn´ıho pˇr´ıkladu nahrad´ıme za aplikaci, kter´a obsahuje nˇekolik sou- bor˚u. Soubory mus´ı b´yt nˇekde uloˇzeny. U verzovac´ıch syst´em˚u se toto m´ısto naz´yv´a repozit´aˇr. Jedn´a se o adres´aˇr, kde jsou ve speci´aln´ım form´atu uloˇzeny vˇsechny sou- bory, kter´e jsou verzovan´e (spravovan´e verzovac´ım syst´emem). Spr´avnˇe nen´ı moˇzn´e do repozit´aˇre pˇristoupit a ruˇcnˇe zmˇenit jeho obsah. M˚uˇzeme si ho pˇredstavit jako bal´ık dat, kter´y obsahuje n´ami vloˇzen´y obsah a doprovodn´a data, kter´a popisuj´ı jednotliv´e zmˇeny proveden´e na datech.

(20)

V pˇr´ıpadˇe, ˇze nepracujeme v t´ymu a chceme pouze ukl´adat historii projektu, staˇc´ı n´am lok´aln´ı repozit´aˇr. Ten leˇz´ı na lok´aln´ım poˇc´ıtaˇci a zpravidla k nˇemu m´a pˇr´ıstup pouze uˇzivatel na dan´em poˇc´ıtaˇci. Aby bylo moˇzn´e data v repozit´aˇri upravo- vat, mus´ıme si vytvoˇrit pracovn´ı kopii repozit´aˇre, ve kter´e m˚uˇzeme prov´adˇet zmˇeny, kter´e opˇet n´aslednˇe nahrajeme do repozit´aˇre. Ten zmˇenu zaznamen´a a uloˇz´ı si ji do sv´e historie.

Obr´azek 2.2: Repozit´aˇr a pracovn´ı kopie

Pr´ace v t´ymu ovˇsem vyˇzaduje tyto repozit´aˇre synchronizovat. Repozit´aˇre mezi sebou dok´aˇz´ı komunikovat a odes´ılat si mezi sebou zmˇeny. Je tedy moˇzn´e propojit dva repozit´aˇre, kter´e si mezi sebou budou odes´ılat zmˇeny.

Obr´azek 2.3: Synchronizace dvou repozit´aˇr˚u

Toto se ovˇsem st´av´a nepraktick´e, kdyˇz se zvyˇsuje poˇcet repozit´aˇr˚u a vznik´a tˇeˇzce udrˇziteln´a infrastruktura. Proto se zav´ad´ı myˇslenka sd´ılen´eho repozit´aˇre, se kter´ym se vˇsechny ostatn´ı repozit´aˇre aktualizuj´ı. Tento repozit´aˇr by mˇel b´yt na veˇrejn´em m´ıstˇe, kam maj´ı vˇsichni uˇzivatel´e pˇr´ıstup, aby se s n´ım mohli co nejˇcastˇeji synchro- nizovat. V praxi se toto ˇreˇsen´ı ukazuje jako nejlepˇs´ı.

(21)

Obr´azek 2.4: Synchronizace dvou repozit´aˇr˚u

Repozit´aˇre, kter´e nejsou sd´ılen´e se naz´yvaj´ı lok´aln´ı nebo uˇzivatelsk´e. Pro zjed- noduˇsen´ı d´ale v pr´aci budou tyto repozit´aˇre komponov´any jako souˇc´ast uˇzivatele a budeme uvaˇzovat, ˇze uˇzivatel komunikuje se sd´ılen´ym repozit´aˇrem pr´avˇe skrze sv˚uj lok´aln´ı repozit´aˇr.

2.1.2 Zivotn´ı cyklus verzov´ ˇ an´ı

Pokud se zamˇeˇr´ıme na nejpokroˇcilejˇs´ı distribuovan´e verzovac´ı syst´emy, vˇsechny maj´ı velice podobn´y ˇzivotn´ı cyklus. Z´akladem je vytvoˇren´ı repozit´aˇre, kter´y je pˇr´ıstupn´y vˇsem pˇrispˇevatel˚um. Pro firemn´ı projekty je dobr´e ho um´ıstit na sd´ılen´y disk a zpˇr´ıstupnit ho poˇzadovan´ym uˇzivatel˚um. Nen´ı probl´em se vˇsak pˇripojit ke vzd´alen´emu repozit´aˇri promoc´ı protokolu SSH nebo HTTPS i vnˇe firemn´ı s´ıtˇe. Vˇetˇsina distri- buovan´ych verzovac´ıch syst´em˚u m´a jiˇz pˇripraven´e rozhran´ı, kter´e implementaci t´eto komunikaci zajiˇst’uje. Existuj´ı dva moˇzn´e sc´en´aˇre pˇri vytv´aˇren´ı repozit´aˇre:

• Obsah (k´od) jiˇz existuje a repozit´aˇre bude obsahovat nˇejak´a data

• Vytvoˇr´ıme pr´azdn´y repozit´aˇr, kter´y n´aslednˇe napln´ıme obsahem

Na z´akladˇe situace vytvoˇr´ıme nov´y repozit´aˇr, kter´y je pr´azdn´y nebo inicializu- jeme repozit´aˇr nad jiˇz existuj´ıc´ım k´odem. V obou situac´ıch se vlastnˇe jedn´a o vy-

(22)

tvoˇren´ı pr´azdn´eho repozit´aˇre, do kter´eho se n´aslednˇe nahraj´ı data.

Obr´azek 2.5: Rozkop´ırov´an´ı repozit´aˇre

Poˇzadov´an´ı uˇzivatel´e si n´aslednˇe vytvoˇr´ı kopie sd´ılen´eho repozit´aˇre.

Nyn´ı uˇz m´a kaˇzd´y uˇzivatel vlastn´ı kopii a m˚uˇze vytv´aˇret zmˇeny. Aˇz uzn´a za vhodn´e, tak odeˇsle seznam sv´ych zmˇen do sd´ılen´eho repozit´aˇre. Nejlepˇs´ı je pos´ılat zmˇeny co nejˇcastˇeji, aby nedoch´azelo ke zbyteˇcnˇe velk´emu mnoˇzstv´ı konflikt˚u. Nejdˇr´ıve syst´em zkontroluje, zda nejsou nov´e zmˇeny ve sd´ılen´em repozit´aˇri od jin´ych uˇzivatel˚u a pokud nejsou, tak zmˇeny odeˇsle.

Obr´azek 2.6: Odesl´an´ı zmˇen do repozit´aˇre

Pokud nˇejak´y jin´y uˇzivatel udˇelal zmˇenu, kter´a jeˇstˇe nen´ı v lok´aln´ım repozit´aˇri zahrnuta, tak se nahr´an´ı do sd´ılen´eho repozit´aˇre neprovede. Syst´em upozorn´ı na vznik konfliktu a bude po n´as poˇzadovat staˇzen´ı zmˇen od ostatn´ıch uˇzivatel˚u. Pˇred odesl´an´ım mus´ıme vlastn´ı zmˇeny spojit se zmˇenami, kter´e provedli ostatn´ı uˇzivatel´e

(23)

a v´ysledek n´aslednˇe odeslat do sd´ılen´eho repozit´aˇre.

Obr´azek 2.7: Pˇrid´an´ı ostatn´ıch zmˇen a odesl´an´ı

Jednou z posledn´ıch d˚uleˇzit´ych ud´alost´ı je navr´acen´ı zmˇen. Pokud nˇejak´y uˇzivatel udˇel´a opravu, kter´a rozbije funkˇcnost aplikace, je nutn´e se vr´atit o jednu nebo nˇekolik verz´ı zpˇet. Jedn´a se vlastnˇe o klasickou zmˇenu v k´odu s t´ım, ˇze zmˇen´ıte k´od do stavu, ve kter´em jiˇz byl.

Obr´azek 2.8: Navr´acen´ı zmˇen

Jak zn´azorˇnuje obr´azek 2.8, uˇzivatel odeslal do sd´ılen´eho repozit´aˇre 3 zmˇeny a kaˇzd´e zmˇenˇe odpov´ıd´a stav aplikace. Zmˇena C dostala aplikaci do stavu, kdy nefunguje. Uˇzivatel tedy chce vr´atit aplikaci do stavu, kdy jeˇstˇe fungovala. Vezme tedy zmˇenu C zpˇet t´ım, ˇze dalˇs´ı zmˇenou neguje vˇse co se v C zmˇenilo.

(24)

2.1.3 V´ yvojov´ e vˇ etve

Jestliˇze verzovac´ı syst´em spravuje napˇr´ıklad internetov´y vyhled´avaˇc str´anek a uˇzivatel provede ´upravu, kterou odeˇsle na sd´ılen´y repozit´aˇr, ´uprava se okamˇzitˇe projev´ı v ostr´e verzi, kter´a je viditelna vˇsem n´avˇstˇevn´ık˚um vyhledavaˇce na internetu. Po- kud by si ovˇsem uˇzivatel chtˇel pouze vyzkouˇset nov´y zp˚usob vyhled´av´an´ı nebo no- vou barvu pozad´ı, bylo by dobr´e m´ıt skrytou kopii, kterou uvid´ı pouze on. Tento probl´em se d´a vyˇreˇsit vytvoˇren´ım dalˇs´ıho repozit´aˇre, kter´y nebude um´ıstˇen viditelnˇe na internetu. Ovˇsem pak mus´ıme ruˇcnˇe ˇreˇsit synchronizaci mezi repozit´aˇri a t´ım se dost´av´ame na ´uroveˇn dokumentu na sd´ılen´em disku.

Obr´azek 2.9: Viditelnost v´yvojov´ych vˇetv´ı

Proto verzovac´ı syst´emy pˇrich´azej´ı s moˇznost´ı zakl´adat v´yvojov´e vˇetve. Umoˇzˇnuj´ı m´ıt hlavn´ı vˇetev, kter´a je napˇr´ıklad viditeln´a vˇsem uˇzivatel˚um internetu, ale k ostatn´ım vˇetv´ım se dostane pouze omezen´a skupina lid´ı.

Dalˇs´ım vyuˇzit´ım v´yvojov´ych verz´ı je vytvoˇren´ı odnoˇze ciz´ıho software. Jestliˇze v´ami obl´ıben´e knihovnˇe sch´az´ı pr´avˇe jedna pro v´as kl´ıˇcov´a funkce, kterou v´ıte jak doprogramovat, ale nechcete celou knihovnu vytv´aˇret znovu, je pro v´as nejlepˇs´ı moˇznost´ı vytvoˇrit odnoˇz jiˇz existuj´ıc´ı knihovny. Jedn´a se o zkop´ırov´an´ı posledn´ı verze knihovny do vlastn´ıho repozit´aˇre, kde knihovnˇe dopln´ıte potˇrebn´e funkce. Po- kud autor knihovny vyd´a aktualizace, kter´e pokud nekoliduj´ı s vaˇsimi zmˇenami, m˚uˇzete si aktualizaci pˇridat i do vlastn´ı knihovny.

(25)

Obr´azek 2.10: Vytvoˇren´ı odnoˇze

2.1.4 Zachytn´ e h´ aky

Pokud jeden z pˇrispˇevatel˚u provede nahr´an´ı sv´ych zmˇen do sd´ılen´eho repozit´aˇre, bylo by dobr´e na to upozornit ostatn´ı. Nebo spustit automatickou sadu test˚u, kter´a ovˇeˇr´ı, ˇze se zmˇenou nic nerozbilo.

Toto je moˇzn´e pr´avˇe pomoc´ı z´achytn´ych h´ak˚u (hooks). Verzovac´ı syst´emy posky- tuj´ı nˇekolik h´ak˚u, na kter´e se daj´ı

”povˇesit“ r˚uzn´e skripty. Vˇetˇsinou lze zvolit, zda chceme skript spustit pˇred nebo po dan´e ud´alosti. Jednotliv´e h´aky jsou rozdˇeleny na lok´aln´ı a serverov´e.

Lok´aln´ı h´aky (v uˇzivatelks´ych repozit´aˇr´ıch) se vˇetˇsinou pouˇz´ıvaj´ı na syntaktic- kou kontrolu zmˇen, kter´e odes´ıl´ame. M˚uˇzeme zde kontrolovat, zda zmˇeny neobsahuj´ı zakomentovan´y k´od nebo lad´ıc´ı informace, kter´e by mˇely z˚ustat pouze na lok´aln´ım poˇc´ıtaˇci uˇzivatele.

Serverov´e h´aky (ve sd´ılen´em repozit´aˇri) naopak nach´azej´ı vyuˇzit´ı pˇri spouˇstˇen´ı test˚u, sestavov´an´ı ˇci publikov´an´ı aktu´aln´ı verze pro veˇrejnost. Jestliˇze napˇr´ıklad selˇze

(26)

testov´an´ı aplikace, budou vˇsichni uˇzivatel´e upozornˇen´ı e-mailem. Z´achytn´e h´aky jsou proto nejd˚uleˇzitˇejˇs´ı souˇc´ast´ı syst´em˚u pro pr˚ubˇeˇznou integraci. Bez nich nen´ı moˇzn´e automaticky reagovat na zmˇeny, kter´e uˇzivatel´e vytv´aˇrej´ı a n´aslednˇe odes´ılaj´ı do sd´ılen´eho repozit´aˇre.

Obr´azek 2.11: Pˇr´ıklad z´achytn´ych h´ak˚u

H´aky na rozd´ıl od soubor˚u nejsou sd´ılen´e, protoˇze v kaˇzd´em repozit´aˇri mohou b´yt r˚uzn´e skripty spojen´e s r˚uzn´ymi ud´alostmi. Nejˇcastˇeji je vˇetˇsina h´ak˚u um´ıstˇena na serveru, kter´y prov´ad´ı testov´an´ı, sestavovan´ı a podobn´e ´ukony.

2.1.5 Uchov´ av´ an´ı historie zmˇ en

Uchov´av´an´ı historie je dalˇs´ı d˚uleˇzitou vlastnost´ı verzovac´ıch syst´em˚u. Historie ob- sahuje hned nˇekolik poloˇzek:

• Jm´eno uˇzivatele, kter´y zmˇenu provedl.

• Kdy zmˇenu uˇzivatel provedl.

• Popis zmˇeny, kterou uˇzivatel provedl.

(27)

• Posledn´ı zmˇena, ze kter´e uˇzivatel vych´azel.

• Obsah zmˇeny (co bylo odebr´ano a co pˇrid´ano).

• V´yvojov´a vˇetev, ve kter´e se zmˇena nach´az´ı.

Syst´em m´a jist´a omezen´ı, kter´a chr´an´ı celistvost historie. Nelze napˇr´ıklad prov´est zmˇenu bez popisuj´ıc´ı zpr´avy. Nelze vytvoˇrit zmˇenu, kter´a m´a stejn´eho pˇredka jako jin´a zmˇena. Odes´ıl´an´a zmˇena mus´ı m´ıt tedy v sobˇe zakomponovan´e vˇsechny zmˇeny, kter´e jiˇz v repozit´aˇri jsou. Jm´eno uˇzivatele se m˚uˇze ovˇeˇrovat a t´ım zjistit, zda uˇzivatel m´a pr´avo udˇelat zmˇenu.

Uk´azka moˇzn´e podoby z´aznamu v historii (Mercurial):

changeset: 24:fd82dc9d5317

branch: default

tag: stable.2

user: Vojta T˚uma <ja@vojta-tuma.cz>

date: Wed Dec 18 21:07:13 2013 +0100 summary: Doc: added readme.md

Historie pak nal´ez´a nˇekolik r˚uzn´ych uplatnˇen´ı:

• Dok´aˇzeme zjistit, kdo provedl jakou zmˇenu.

• Dok´aˇzeme zjistit, kdo je autorem k´odu, kter´y upravujeme.

• Dok´aˇzeme zjistit, jak´e zmˇeny nem´ame zakomponovan´e v lok´aln´ım repozit´aˇri.

• Dok´aˇzeme se vracet ve zmˇen´ach. Uv´est k´od do dˇr´ıvˇejˇs´ı verze.

• Zobrazovat rozd´ıly mezi jednotliv´ymi zmˇenami.

(28)

• Kontrolovat produktivitu pr´ace program´ator˚u.

Shrnut´ım vˇsech tˇechto vlastnost´ı dost´av´ame velice siln´y n´astroj, jak kontrolovat v´yvoj projektu a prov´adˇet jeho verzov´an´ı.

2.1.6 Dobr´ e zvyky pro pouˇ z´ıv´ an´ı verzovac´ıch syst´ em˚ u

Pˇri pouˇz´ıv´an´ı verzovac´ıch syst´em˚u existuje ˇrada dobr´ych zvyk˚u, kter´e n´am mohou velice ulehˇcit pr´aci.

Asi nejd˚uleˇzitˇejˇs´ı z nich je ˇcast´e synchronizov´an´ı k´odu se sd´ılen´ym repozit´aˇrem.

Pokud se n´am bˇehem mˇes´ıce nahromad´ı zmˇeny od jin´ych uˇzivatel˚u a my se bu- deme snaˇzit tyto zmˇeny zakomponovat do naˇs´ı lok´aln´ı verze, je t´emˇeˇr jist´e, ˇze dojde ke konfliktu, kter´y n´am nedovol´ı zmˇeny automaticky zakomponovat. Mus´ıme tedy ruˇcnˇe urˇcit, jak se maj´ı zmˇeny propojit. Toto nastane, pokud dva r˚uzn´ı uˇzivatel´e edituj´ı stejnou ˇc´ast k´odu.

Jedna zmˇena by mˇela obsahovat pouze vˇeci, kter´e spolu souvisej´ı. Nedodrˇzen´ı to- hoto pravidla vede k vytv´aˇren´ım dlouh´ych popis˚u zmˇen, kter´e se stanou nepˇrehledn´e.

Vˇetˇsinou se vˇsak uchyluje k jednoduˇsˇs´ım zpr´av´am jako ”velk´a zmˇena”, kter´e jsou v podstatˇe nejhorˇs´ı, protoˇze o zmˇenˇe nic nevypov´ıdaj´ı.

V´ysledkem zmˇeny by mˇel b´yt opˇet funkˇcn´ı k´od. Pokud v´ıme, ˇze nˇeco nefun- guje naprosto spr´avnˇe, tak nem´a smysl vytv´aˇret zmˇenu. T´ım vznikaj´ı zmˇeny, do kter´ych se nelze vracet, protoˇze v danou dobu byla aplikace nefunkˇcn´ı. Ne vˇsak vˇzdy dok´aˇzeme urˇcit funkˇcnost aplikace a provedeme nevˇedomˇe nefunkˇcn´ı zmˇenu.

(29)

Prov´ad´ıme-li opravu jiˇz implementovan´ych funkc´ı a z´aroveˇn pˇrid´av´ame nov´e funkce, snaˇz´ıme se nem´ıchat tyto dvˇe poloˇzky do jedn´e zmˇeny. Pokud ovˇsem na sobˇe nejsou funkˇcnˇe z´avisl´e.

Posledn´ım a nejd˚uleˇzitˇejˇs´ım zvykem jsou spr´avnˇe popisky zmˇen. Popisek by mˇel obsahovat, jak´e ˇc´asti aplikace se zmˇena t´yk´a a co bylo opraveno nebo pˇrid´ano. Exis- tuje dokument [3], kter´y ˇr´ık´a jak popisky vytv´aˇret.

2.2 Pˇ redstavitel´ e verzovac´ıch syst´ em˚ u

Existuje mnoˇzstv´ı verzovac´ıch syst´em˚u, kde kaˇzd´y vynik´a v urˇcit´ych oblastech. Pro pr´aci byly vybr´any syst´emy 3 nejpouˇz´ıvanˇejˇs´ı [2] syst´emy a to GIT, Mercurial a Ba- zaar. Mezi dalˇs´ı zn´amˇejˇs´ı pˇredstavitel´e patˇr´ı verzovac´ıch syst´em˚u patˇr´ı BitKeeper, CVS, Perforce a Team Foundation Server. V dobˇe vytv´aˇren´ı pr´ace existovalo celkem kolem 30 syst´em˚u pro verzov´an´ı.

2.2.1 GIT

GIT je syst´em p˚uvodnˇe vyvinut´y pro spr´avu zdrojov´eho k´odu pro j´adro Linuxu.

Byl vytvoˇren Linusem Torvaldsem, kter´y je zakladatelem Linuxu. Je zaloˇzen na sn´ımkov´an´ı k´odu. Pokud uˇzivatel provede zmˇenu na souboru, tak se vytvoˇr´ı sn´ımek souboru, kter´y reprezentuje stav souboru pˇred zmˇenou. Ukl´adaj´ı se tedy vˇzdy cel´e soubory. Hlavn´ı vlastnosti GIT jsou :

• Vytv´aˇren´ı sn´ımk˚u soubor˚u.

(30)

• Do zmˇen zaˇrazovat pouze jednotliv´e ˇr´adky.

• Moˇznost mˇenit historii.

• Nen´ı nutn´e stahovat celou historii.

• Nejv´ıce rozˇs´ıˇren´ı (nejvˇetˇs´ı podpora).

• Mezi pracovn´ı kopii a lok´aln´ım repozit´aˇrem je mezistupeˇn stash.

• Nevhodnˇe zvolen´e n´azvoslov´ı pˇr´ıkaz˚u.

2.2.2 Mercurial

Mercurial, tak´e oznaˇcovan´y jako HG, je v´ysledkem pr´ace Matta Mackalla. Ten zaˇcal s v´yvojem ve stejnou dobu, jako se zaˇcal vyv´ıjet GIT. Vˇetˇsina syst´emu je napsan´a v jazyce Python, ˇc´ımˇz se st´av´a multiplatformn´ı. Narozd´ıl od GIT pouˇz´ıv´a pouze rozd´ılov´e zmˇeny, ˇc´ımˇz je m´enˇe n´aroˇcn´y na datov´y provoz. Hlavn´ı vlastnosti Mercu- rial jsou:

• Intuitivn´ı n´azvy pˇr´ıkaz˚u.

• Jednoduchost.

• Zmˇeny pomoc´ı changeset (seznam zmˇen).

• Dobr´a podpora.

• Vyspˇel´e grafick´e n´astroje.

2.2.3 Bazaar

Bazaar je syst´em podporovan´y firmou Canoncial, kter´a stoj´ı za v´yvojem zn´ame linuxov´e distribuce Ubuntu. Jedn´a se o multiplatformn´ı syst´em napsan´y v jazyce

(31)

Python. V´yvoj se opˇet datuje do stejn´eho obdob´ı jako u dvou pˇredchoz´ıch syst´em˚u.

V posledn´ı dobˇe syst´em neprojevuje vˇetˇs´ı v´yvoj a je sp´ıˇs na ´ustupu. Nicm´enˇe z histo- rick´ych d˚uvod˚u jsou pomoc´ı nˇeho verzov´any projekty jako MySQL, MariaDB nebo GNOME.

2.3 Sestavovac´ı syst´ em

Ze zdrojov´eho k´odu je potˇreba vytvoˇrit spustitelnou aplikaci. Tento proces m˚uˇze b´yt komplikovan´y a ve v´ysledku se skl´adat z nˇekolik po sobˇe jdouc´ıch ˇcinnost´ı, kter´e je nutn´e manu´al vykon´avat. At’ uˇz se jedn´a o kompilace, aktualizov´an´ı datab´aze nebo kop´ırov´an´ı soubor˚u, jde t´emˇeˇr vˇsechno zautomatizovat.

Vezmˇeme si opˇet pˇr´ıklad, na kter´em si vysvˇetl´ıme jakou m´a ´ulohu sestavovac´ı syst´em s vyuˇzit´ım predchoz´ı znalosti o verzovac´ıch syst´emech. Mˇejme webovou apli- kaci, kterou upravujeme na lok´aln´ım poˇc´ıtaˇci a mus´ıme ji vystavit na veˇrejn´y web.

Ukol, kter´´ y n´as potk´a vˇzdy, je kop´ırov´an´ı nov´ych soubor˚u na ´uloˇziˇstˇe, kde bude aplikace veˇrejnˇe dostupn´a. Otevˇreme tedy libovoln´eho spr´avce soubor˚u a pˇrekop´ırujeme vˇsechna potˇrebn´a data. Pozdˇeji zjist´ıme, ˇze je lepˇs´ım ˇreˇsen´ım je vytvoˇren´ı skriptu, kter´y ´ukony vykon´a za n´as. At’ uˇz kop´ırujeme soubory skrze FTP, SSH nebo jin´y pro- tokol, jistˇe nalezneme i n´astroj, kter´y toto bude dˇelat za n´as. Jedn´ım ze z´akladn´ıch n´astroj˚u je synchronizace adres´aˇr˚u. V´ysledkem je tedy skript, kter´y spust´ıme ruˇcnˇe pˇr´ıkazem.

Dalˇs´ım ´ukolem m˚uˇze b´yt generov´an´ı jazykov´ych pˇreklad˚u pro aplikace. Pokud pouˇz´ıv´ame gettext [5], je nutn´e soubor s pˇreklady kompilovat. Pˇri pˇrid´an´ı nov´ych pˇreklad˚u je nutn´e soubor ruˇcnˇe zkompilovat a n´aslednˇe ho nahr´at spoleˇcnˇe s ostatn´ımi

(32)

soubory. Opˇet se jedn´a o vˇec, kterou m˚uˇzeme pˇridat do skriptu. Pˇridejme ho tedy na zaˇc´atek pˇredchoz´ıho skriptu, aby se pˇreklady zkompilovali a n´aslednˇe odeˇsleme vˇsechny soubory.

Pokud si chceme uchov´avat zmˇeny v datab´azi, existuje moˇznost pouˇz´ıvat n´astroj, kter´y n´am bude datab´azi automaticky aktualizovat. Nejjednoduˇsˇs´ı ˇreˇsen´ı je si ve sv´em projektu vytvoˇrit sloˇzku, do kter´e budeme pˇrid´avat soubory obsahuj´ıc´ı napˇr´ıklad SQL pˇr´ıkazy, kter´e se maj´ı nad datab´azi vykonat. Lepˇs´ıˇreˇsen´ı je opˇet vytvoˇrit skript, jenˇz n´am tyto soubory s´am spust´ı po nahr´an´ı. Pˇridejme ho tedy opˇet na zaˇc´atek naˇseho prvn´ıho skriptu, protoˇze je spr´avn´e nejdˇr´ıv upravit datab´azi a n´aslednˇe k´od, kter´y jiˇz poˇc´ıt´a se zmˇenami v datab´azi.

Aplikace je hojnˇe pouˇz´ıvan´a a nechceme, aby obsahovala chyby. Proto vyuˇz´ıv´ame i testov´an´ı, kter´e se spouˇst´ı pomoc´ı nˇekolika n´astroj˚u. M´ame jednotkov´e testy, kter´e v ide´aln´ım pˇr´ıpadˇe pokr´yvaj´ı vˇetˇsinu k´odu naˇs´ı aplikace. Tyto testy by mˇely b´yt spuˇstˇeny pˇred nahr´an´ım nov´eho k´odu na veˇrejn´y web. Opˇet je lze spouˇstˇet automa- ticky. Opˇet pˇrid´ame skript, kter´y spust´ı vˇsechny testy.

Pr´avˇe jsme pokryli znaˇcnou ˇc´ast ˇcinnost´ı, kter´e jsme museli prov´adˇet ruˇcnˇe, ale nyn´ı je dˇelaj´ı skripty za n´as. T´ım jsme vytvoˇrili automatick´y sestavovac´ı syst´em.

Jednotliv´e ˇc´asti syst´emu sv´aˇzeme se z´achytn´ymi h´aky verzovac´ıho syst´emu. Nejprve spust´ıme testy a jako posledn´ı nahrajeme aplikaci na veˇrejn´y web.

2.4 Testov´ an´ı

V pˇredchoz´ı kapitole bylo zd˚uraznˇeno testov´an´ı softwaru. Jedn´a se o ˇcinnost, jejiˇz n´avratnost nen´ı tak zˇrejm´a, protoˇze testov´an´ı pˇr´ımo negeneruje novou funkˇcnost

(33)

aplikace, kterou by z´akazn´ık mohl vidˇet. Nicm´enˇe zkuˇsenosti ukazuj´ı, ˇze vytv´aˇret testy m´a smysl[6].

Dobr´ym pˇr´ıkladem m˚uˇze b´yt klasick´y internetov´y obchod. Zde je kl´ıˇcovou vlast- nost´ı moˇznost dokonˇcen´ı objedn´avky. Firma vytvoˇr´ı pro z´akazn´ıka aplikaci, kter´a bude prod´avat jeho produkty na internetu. Jiˇz pˇri v´yvoji nˇekolikr´at zkouˇs´ı, zda jde dokonˇcit objedn´avka. Kdyˇz vˇse funguje spr´avnˇe, tak produkt z´akazn´ıkovi pro- daj´ı. Uplyne jist´a doba a z´akazn´ık, chce vytvoˇrit dalˇs´ı funkˇcnost. Firma pˇrid´a nov´e funkce a opˇet ovˇeˇr´ı zda, objedn´avka funguje, protoˇze se jednalo o velk´e z´asahy.

Vˇse se st´ale prov´ad´ı ruˇcnˇe a kaˇzd´y test zabere neopomenutelnou dobu. Za rok se z´akazn´ık opˇet ozve a chce vytvoˇrit zas´ıl´an´ı v´anoˇcn´ıch pouk´azek. Term´ın na reali- zaci je velmi kr´atk´y, a proto firma narychlo nasazuje odes´ıl´an´ı pouk´azek. Bohuˇzel aktualizace vyˇzadovala ´upravu komponenty, kter´a odes´ıl´a e-maily, takˇze k odesl´an´ı e-mailu je nutn´y dalˇs´ı povinn´y parametr. S t´ım ovˇsem nepoˇc´ıt´a odes´ıl´an´ı potvrzen´ı objedn´avky. A v´ysledkem je, ˇze se neodes´ılaj´ı e-maily po dokonˇcen´ı objedn´avky, coˇz je kl´ıˇcov´a vlastnost. Pokud by existoval test na odes´ıl´an´ı e-mailu s potvrzen´ım objedn´avky, nemohlo by k tomuto doj´ıt. Pˇri spuˇstˇen´ı vˇsech test˚u by doˇslo k chybˇe a sestavovac´ı syst´em by nedovolil aktualizovat aplikaci.

Existuje nˇekolik zp˚usob˚u testov´an´ı [9]:

• Program´atorsk´e - Dva program´atoˇri si navz´ajem kontroluj´ı k´od. Jeden k´od vytvoˇr´ı, druh´y k´od zkontroluje a vytvoˇr´ı pro k´od testy (zpravidla ruˇcnˇe otestuje funkce). Jedn´a se o nejm´enˇe n´akladn´e a nejv´ıce ´uˇcinn´e testov´an´ı.

• Jednotkov´e - N´asleduj´ı po program´atorsk´em testov´an´ı. Testovanou jednotkou lze rozumˇet jako oddˇelitelnou ˇc´ast aplikace, na kterou se vytvoˇr´ı test, jenˇz ovˇeˇr´ı jej´ı funkˇcnost. Aplikovat jednotkov´e testy do existuj´ıc´ıho projektu je vˇetˇsinou velmi sloˇzit´e. Pokud se tyto testy aplikuj´ı jiˇz pˇri v´yvoji aplikace, vedou k vytv´aˇren´ı kvalitn´ı k´odu.

(34)

• Funkˇcn´ı - Ovˇeˇruj´ı, zda je aplikace schopn´a plnit ´ukoly, pro kter´e byla navrˇzena a zda jsou splnˇeny vˇsechny poˇzadavky z´akazn´ıka. V pˇr´ıpadˇe internetov´eho obchodu by testov´an´ı objedn´avky spadalo pr´avˇe do funkˇcn´ıch test˚u.

• Integraˇcn´ı - Jedna z podmnoˇzin funkˇcn´ıho testov´an´ı. Kontroluje se spr´avn´a ko- munikace komponent aplikace mezi sebou, ale i napˇr´ıklad komunikaci s operaˇcn´ım syst´emem nebo hardwarem. U menˇs´ıch projekt˚u lze tuto ˇc´ast vynechat.

• Uˇzivatelsk´e - Aplikaci by mˇel pochopit i nˇekdo jin´y neˇz jej´ı v´yvoj´aˇr. Vezme se tedy n´ahodn´y ˇclovˇek a zadaj´ı se mu ´ukoly, kter´e m´a s aplikac´ı vykonat. Pokud je nedok´aˇze dokonˇcit ani s n´avodem, je vˇetˇsinou aplikace ˇspatnˇe navrˇzen´a.

T´ım je ukonˇcena motivaˇcn´ı ˇc´ast, proˇc pouˇz´ıvat n´astroje pr˚ubˇeˇzn´e integrace.

(35)

3 N´ avrh vlastn´ıho ˇ reˇ sen´ı

C´ılem pr´ace bylo sezn´amen´ı se s problematikou verzovac´ıch syst´em˚u a n´astroji pr˚ubˇeˇzn´e integrace. N´aslednˇe dan´e znalosti uplatnit pro n´avrh vlastn´ıho syst´emu pr˚ubˇeˇzn´e integrace, kter´y je zamˇeˇren na v´yvoj aplikac´ı v prostˇred´ı www aplikac´ı.

Tento n´avrh mˇel b´yt nakonec prakticky implementov´an.

3.1 Sezn´ amen´ı se s problematikou

Autor pr´ace jiˇz pˇred vytvoˇren´ım diplomov´e pr´ace mˇel zkuˇsenost s pouˇz´ıv´am verzo- vac´ıch syst´em˚u. Nejv´ıce byl sezn´amen s verzovac´ım syst´emem Mercurial. Bylo nutn´e vylepˇsit znalosti o syst´emu GIT a Bazaar.

GIT jako nejpouˇz´ıvanˇejˇs´ı verzovac´ı syst´em poskytuje ˇsirokou ˇsk´alu dokumentaˇcn´ıch materi´alu. Existuje nˇekolik webov´ych aplikac´ı, kter´e umoˇzˇnuj´ı spr´avu repozit´aˇre skrze vzd´alen´y pˇr´ıstup. Inspirovat se je moˇzn´e napˇr´ıklad na projektu GitHub [7], kter´y poskytuje jedno z nejl´epe zpracov´an´ych rozhran´ı pro spr´avu repozit´aˇre po- moc´ı grafick´eho rozhran´ı.

Stejnˇe tak Mercuri´al je velice dobˇre zdokumentovan´y syst´em. Mezi nejzn´amˇejˇs´ı grafick´e n´astavby patˇr´ı HgTurtoise, kter´y poskytuje vˇsechny potˇrebn´e vlastnosti pro celkovou spr´avu repozit´aˇre. Autorova znalost Mercurialu vˇsak postaˇcuje pro potˇreby,

(36)

kter´e bude v´ysledn´y syst´em obsahovat.

U syst´emu Bazaar se uk´azalo, ˇze se jiˇz nad´ale aktivnˇe nevyv´ıj´ı, a proto od jeho implementace do v´ysledn´eho syst´emu bylo upuˇstˇeno. Posledn´ı aktualizace Bazaaru byla podle domovsk´e str´anky projektu [4] provedena v z´aˇr´ı roku 2013 a nad´ale se nepl´anuje jeho dalˇs´ı v´yvoj.

Sezn´amen´ı se s n´astroji pr˚ubˇeˇzn´e integrace nebo cel´ymi syst´emy bylo obt´ıˇznˇejˇs´ı.

Existuje nˇekolik des´ıtek syst´em˚u, kter´e poskytuj´ı n´astroje pro pr˚ubˇeˇznou integraci.

Liˇs´ı se v platform´ach, licenc´ıch, podpoˇre pro IDE a ostan´ıch vlastnostech [8]. Mezi nejzn´amˇejˇs´ı syst´emy patˇr´ı Jenkins, Travis a TeamCity. Vˇsechny tyto syst´emy maj´ı nˇekolik sv´ych priorit, kter´ymi se d´a inspirovat. Podporuj´ı vystaven´ı k´odu na pro- dukˇcn´ı server, spuˇstˇen´ı test˚u, sestaven´ı aplikace a mnoho dalˇs´ıho.

3.2 N´ avrh vlastn´ıho ˇ reˇ sen´ı

Ze z´ıskan´ych znalost´ı a dosavadn´ıch zkuˇsenost´ı autora byl vytvoˇren n´avrh vlastn´ıho syst´emu. Syst´em mus´ı splˇnovat n´asledujic´ı poˇzadavky:

• Spr´ava repozit´aˇru

• Spr´ava sestavovac´ıch skript˚u

• Spr´ava pˇr´ıstup˚u

• Grafick´e rozhran´ı pro snadn´y pˇr´ıstup

• Konzolov´y pˇr´ıstup pro detailnˇejˇs´ı nastaven´ı

(37)

Pro spr´avu repozit´aˇru je tˇreba vytvoˇrit vlastn´ı syst´em, kter´y bude na vstupu pod- porovat dva r˚uzn´e druhy repozit´aˇr˚u. Repozit´aˇre pro syst´em GIT a Mercuri´al. Bude kladen d˚uraz na jednoduchost nastavov´an´ı repozit´aˇr˚u a moˇznost vykon´avat z´akladn´ı operace nad repozit´aˇri. Tedy vytvoˇren´ı repozit´aˇre, klonov´an´ı repozit´aˇre, zjiˇstˇen´ı potˇrebn´ych ´udaj˚u o repozit´aˇri a pˇr´ıpadnˇe i jeho smaz´an´ı. Souˇc´ast´ı syst´emu pro spr´avu repozit´aˇr˚u bude i moˇznost nastavov´an´ı vlastn´ıch sestavovac´ıch skript˚u. Pˇri vytv´aˇren´ı skriptu bude kladen d˚uraz na co nejvˇetˇs´ı intuitivnost pˇri jeho vytv´aˇren´ı.

Bude pouˇzit n´avrh pomoc´ı grafick´eho editoru, kter´y bude obsahovat funkˇcn´ı bloky.

Tyto bloky bude uˇzivatel spojovat a tak vytv´aˇret sloˇzitˇejˇs´ı funkce.

Pro spr´avu pˇr´ıstup˚u k repozit´aˇr˚um bude vytvoˇren dalˇs´ı syst´em, kter´y bude spravovat pˇr´ıstupy pomoc´ı protokolu SSH. Tento syst´em bude m´ıt za ´ukol iden- tifikovat pˇr´ıchoz´ı spojen´ı a ovˇeˇrit, zda m´a povolen´ı nad dan´ym repozit´aˇrem prov´est poˇzadovanou ˇcinnost. Jeho dalˇs´ıˇcinnost bude upravovat soubory operaˇcn´ıho syst´emu, kter´e maj´ı za ´ukol obsluhovat pˇripojen´ı pomoc´ı protokolu SSH.

Pro moˇznost vytvoˇren´ı sestavovac´ıho skriptu bude nutn´e vytvoˇrit vlastn´ı ja- zyk, pomoc´ı kter´eho se bude skript vytv´aˇret. Dosavadn´ı, autorem nalezen´e jazyky a n´astoje, nejsou dostateˇcnˇe ohebn´e, aby se daly jednoduˇse sestavovat v grafick´em rozhran´ı. Zde se nach´az´ı asi nejsloˇzitˇejˇs´ı ˇc´ast pr´ace, kter´e bude vˇenov´an nejvˇetˇs´ı d˚uraz.

Jako hlavn´ı programovac´ı jazyk bude zvolen PHP, protoˇze ho autor nejl´epe ovl´ad´a. Sestavovac´ı skripty budou ve form´atu XML, protoˇze tento form´at posky- tuje dobr´e n´astroje pro validaci. Syst´em bude c´ılit hlavnˇe na v´yvoj´aˇre pouˇzivajic´ı volnˇe ˇs´ıˇriteln´y nebo svobodn´y software. Proto bude hlavn´ım platformou operaˇcn´ı syst´em Linux.

(38)

4 Vlastn´ı ˇ reˇ sen´ı

V n´asleduj´ıc´ı ˇc´asti pr´ace se budeme zab´yvat implementac´ı konkr´etn´ıho syst´emu, kter´y si klade za c´ıl poskytnout uˇzivateli vˇsechny potˇrebn´e n´astroje, aby mohl zaˇc´ıt vyuˇz´ıvat pr˚ubˇeˇznou integraci pro sv˚uj projekt. Z´aroveˇn klade d˚uraz na jednoduchou instalaci, intuitivn´ı ovl´ad´an´ı a pˇrehledn´e v´ystupy. Syst´em je rozdˇelen do tˇr´ı ˇc´ast´ı.

Jazyk je zvolena angliˇctina, aby nebyla aplikace omezen´a pouze pro n´arodn´ı trh.

Skrze rozhran´ı, kter´e aplikace poskytuje je moˇzn´e prov´est lokalizaci do jak´eho koliv jin´eho jazyka.

Obr´azek 4.1: Sch´ema syst´emu

Obr´azek 4.1 vystihuje sch´ema cel´eho syst´emu. Na poˇc´atku je uˇzivatel, kter´y m´a z´ajem poslat svoje nov´e zmˇeny do repozit´aˇre. Pˇripoj´ı se tedy pomoc´ı pro- tokolu SSH ke vzd´alen´emu repozit´aˇri, kde Stas zkontroluje, zda m´a k pˇripojen´ı pr´avo. Po ovˇeˇren´ı se dost´av´a uˇzivatel pˇr´ımo k repozit´aˇri, do kter´eho zap´ıˇse svoje

(39)

zmˇeny. V jin´em pˇr´ıpadˇe se uˇzivatel pˇripojuje k Prestaciu, kter´e mu umoˇzn´ı na- staven´ı vˇsech repozit´aˇr˚u. Z´ısk´a informace o stavu repozit´aˇre a m´a moˇznost mˇenit sestavovac´ı skript pˇriˇrazen´y k dan´emu repozit´aˇri. Pokud dojde k ud´alosti, kter´a vy- vol´a spuˇstˇen´ı sestavovac´ıho skriptu, tak je spouˇstˇen Hockej s pˇr´ısluˇsn´ymi parametry.

Vˇsechny ˇc´asti Hockeje byly t´ymovˇe vyv´ıjeny. N´asleduje popis ˇcinost´ı jednotliv´ych komponent syst´emu.

4.1 Hockej

Pro ´uˇcel pr´ace byl vyvinut sestavovac´ı syst´em, kter´y nese jm´eno Hockej. Lze pomoc´ı nˇeho spouˇstˇet r˚uzn´e c´ıle pr˚ubˇeˇzn´e integrace. Poˇc´ınaje kop´ırov´an´ım soubor˚u a konˇce verzov´an´ı datab´aze. Jeho hlavn´ım c´ılem je co nejv´ıce zjednoduˇsit tvorbu sestavo- vac´ıch skript˚u.

4.1.1 Sestavovac´ı skript

Definice ˇcinnosti Hockeje je obsaˇzena v sestavovac´ım skriptu. Tento skript obsahuje definice ˇcinnost´ı, kter´e lze vykon´avat. Soubor se skriptem m´a koncovku ”.hockej”, je ve form´atu XML a jeho jednotliv´e elementy maj´ı speci´aln´ı v´yznam. Existuj´ı 4 druh´y element˚u:

• Definice - Nejmenˇs´ı jednotka, kter´a vykon´av´a ˇcinnost (kop´ırov´an´ı, maz´an´ı, filtrov´an´ı atd.). Nelze samostatnˇe spustit.

• Pˇr´ıkaz - Shluk v´ıce definic, kter´e se s´eriovˇe po sobˇe spouˇst´ı. Jednotliv´e pˇr´ıkazy je moˇzn´e spouˇstˇet z pˇr´ıkazov´e ˇr´adky.

(40)

• Odvozen´ı - Z definice lze odvodit novou vlastn´ı definici, kter´a m´a jiˇz pˇrednastaven´e vlastnosti.

Koˇrenov´ym elementem kaˇzd´eho sestavovac´ıho skriptu je element <hockej>, kter´y ˇr´ık´a, ˇze se bude jednat o sestavovac´ı skript Hockeje. N´asleduje nepovinn´y element

<description>, kter´y by mˇel popisovat ˇcinnost sestavovac´ıho skriptu. Stejnˇe tak m˚uˇze b´yt doplnˇen nepovinn´y element <version> urˇcuj´ıc´ı verzi dan´eho skriptu.

4.1.2 Katalog

Definice vˇsech ˇcinnost´ı, kter´e Hockej dok´aˇze vykonat, jsou um´ıstˇen´ı v kataloz´ıch.

Katalog se do sestavovac´ıho skriptu pˇrid´a pomoc´ı elementu <catalog>. M´a dva povinn´e parametry:

• from - ˇR´ık´a, kde se nach´azej´ı soubory potˇrebn´e pro inicializaci katalogu.

• as - Pˇriˇrazuje katalogu jmenn´y prostor, pod kter´ym bude pˇr´ıstupn´y. Jeho elementy jsou n´aslednˇe pˇr´ıstupn´e jako ”namespace.”a jm´eno definice.

Existuj´ı celkem 4 zdroje katalog˚u:

• Vestavˇen´e - Jsou pˇr´ımo souˇc´ast´ı instalace Hockeje. K´od, kter´y se bude vy- kon´avat je nadefinov´an pouze v nich. Ostatn´ı katalogy pouze dˇed´ı z vestavˇen´ych katalog˚u. V´ychoz´ı adres´aˇr je ”/usr/share/hockej/catalogs/”.

• Uˇzivatelsk´e - Vlastn´ı katalogy, kter´e si vytv´aˇrej´ı uˇzivatel´e. Uloˇzen´y zpravidla v uˇzivatelsk´e sloˇzce poˇc´ıtaˇce. V´ychoz´ı adres´aˇr je ”/home/user/.local/hockej/”.

• Projektov´e - Jeden projekt m˚uˇze vlastnit nˇekolik priv´atn´ıch katalog˚u. V´ychoz´ı cesta nen´ı pˇredem urˇcen´a.

(41)

• Pˇr´ım´e - Zapisuj´ı se pˇr´ımo do sestavovac´ıho skriptu jako element <catalog>

bez parametru ”from”.

Obr´azek 4.2: Hockej katalogy

Aˇz na vestavˇen´e katalogy, kter´e jsou definov´any v´ıce soubory, si vˇsechny vytv´aˇr´ı uˇzivatel. Nejjednoduˇsˇs´ı je vytvoˇrit pˇr´ım´y katalog, kter´y je souˇc´ast´ı sestavovac´ıho skriptu.

4.1.3 Definice

Nejmenˇs´ı vykonatelnou ˇc´ast´ı pro Hockej je definice. Jedn´a se napˇr´ıklad o vytvoˇren´ı instance souboru, z´apis do souboru, vytvoˇren´ı sloˇzky nebo spuˇstˇen´ı skriptu. V pˇredchoz´ıch

pˇr´ıpadech byly definice napˇr´ıklad elementy <print from="fs.file-write">, <file from="my.my-file">

nebo <content from="core.string">. Vˇsechny maj´ı definovan´y povinn´y parametr

”from”, kter´y ˇr´ık´a jak´a je rodiˇcovsk´a definice toho prvku. Pˇriˇcemˇz kaˇzd´y element m˚uˇze m´ıt pr´avˇe jednoho rodiˇce, ale i tak se daj´ı vytv´aˇret sloˇzit´e struktury.

(42)

Obr´azek 4.3: Hockej - skl´ad´an´ı definic

4.2 Prestacio

Aplikace poskytuj´ıc´ı grafick´e prostˇred´ı pro ovl´ad´an´ı cel´eho syst´emu. Je vytvoˇrena na z´akladˇe aplikaˇcn´ıho frameworku Nette [10]. Jedn´a se o nejd˚uleˇzitˇejˇs´ı komponentu syst´emu a proto je po n´ı cel´y syst´em nazv´an.

Obr´azek 4.4: Menu Prestacio se skl´ad´a z n´asleduj´ıc´ıch ˇc´ast´ı:

• Home - Jednoduch´y popis aplikace

• Repositories - Seznam vˇsech repozit´aˇr˚u

• Hockej - Sestavovac´ı syst´em (glob´aln´ı nastaven´ı)

• Accounts - Uˇzivatelsk´e ´uˇcty, pro pˇr´ıstup k repozit´aˇr˚um

• About - M´ısto pro vloˇzen´ı vlastn´ıho textu (napˇr´ıklad kr´atk´y popis firmy, pro- jekt˚u atd.)

(43)

4.2.1 Repozit´ aˇ re

Prestacio dok´aˇze spravovat nˇekolik repozit´aˇr˚u najednou. Skrze jednotliv´e verzovac´ı syst´emy jsou o repozit´aˇr´ıch z´ısk´av´an´e ´udaje, kter´e jsou n´aslednˇe zobrazeny v gra- fick´em prostˇred´ı uˇzivately. Je moˇzn´e spravovat repozit´aˇre verzovac´ıch syst´em˚u GIT a Mercuri´al. Lze prov´adˇet pouze vytˇeˇzov´an´ı informac´ı a nelze prov´adˇet zmˇeny v nasta- ven´ı repozit´aˇr˚u. T´ım je ˇc´asteˇcnˇe zabezpeˇcena konzistence dat a z´abr´anˇeno uˇzivateli syst´emu repozit´aˇr uv´est do nefunkˇcn´ıho stavu.

4.2.2 Sestavovac´ı skript

Prestacio umoˇzˇnuje kaˇzd´emu repozit´aˇri vytvoˇrit vlastn´ı sestavovac´ı skript, kter´y slouˇz´ı k zautomatizov´an´ı ˇcinost´ı nad repozit´aˇrem. Skript m˚uˇze b´yt vytvoˇren v tex- tov´em editoru nebo lze vyuˇz´ıt grafick´e nadstavby, kter´a umoˇzˇnuje jednoduch´e vytv´aˇren´ı skript˚u. Grafick´emu editoru a vytv´aˇren´ı skript˚u bude vˇenov´ana ˇc´ast dalˇs´ı kapitoly.

4.2.3 Hockej

Tato ˇc´ast z´ısk´av´a vˇsechny dostupn´e informace o aktu´aln´ım nastaven´ı Hockeje. Tedy informace o kataloz´ıch, kde jsou podrobnˇe pops´an´y vˇsechny definice, kter´e jsou v ka- taloz´ıch obsaˇzeny. Katalogy jsou rozdˇeleny na syst´emov´e a uˇzivatelsk´e.

4.2.4 Uˇ zivatelsk´ e ´ uˇ cty

K repozit´aˇr˚um mohou pˇristupovat rozliˇcn´ı uˇzivatel´e, proto tato sekce umoˇzˇnuje spra- vovat pˇr´ıstupy uˇzivatel˚u k jednotliv´ym repozit´aˇr˚um a pˇrid´avat k nim opr´avnˇen´ı na ˇcten´ı ˇci z´apis. Je zde tak´e spr´ava vˇsech veˇrejn´y kl´ıˇc˚u potˇrebn´ych pro zabezpeˇcenou komunikaci protokolem SSH mezi uˇzivatelem a repozit´aˇrem.

(44)

4.3 Stas

Pro moˇznost pˇripojen´ı uˇzivatel˚u skrze protokol SSH bylo nutn´e vytvoˇrit syst´em, kter´y bude uˇzivatele ovˇeˇrovat. Jedn´a se tedy o vrstvu, kter´a je vloˇzena mezi sluˇzbou spravujic´ı SSH komunikaci a repozit´aˇrem. Zkratka syst´emu Stas znamen´a ”Ssh Tri- vial Authorization System”. Jedn´a se o obdobu syst´emu Gitolite [11], kter´y ovˇsem podporuje pouze verzovac´ı syst´em GIT.

V pˇr´ıpadˇe, kdy se uˇzivatel pˇripojuje skrze prokol SSH ke vzd´alen´emu repozit´aˇri a pˇripojen´ı nen´ı spravovan´e pomoc´ı Stas, je pr˚ubˇeh n´asledujic´ı:

• Uˇzivatel se autorizuje pomoc´ı sv´eho veˇrejn´eho kl´ıˇce nebo hesla sluˇzbˇe serveru na kter´y se pˇripojuje.

• Uˇzivatel dostane pˇr´ıstup pˇr´ımo k repozit´aˇri a nahraje do nˇej svoje zmˇeny.

Nen´ı tedy zde nic, co by uˇzivatele identifikovalo. Do repozit´aˇre tedy mohou pˇrisp´ıvat vˇsichni, kteˇr´ı maj´ı heslo nebo zaregistrovan´y veˇrejn´y kl´ıˇc.

V druh´em pˇr´ıpadˇe se uˇzivatel pˇripojuje ke vzd´alen´emu uloˇziˇsti spravovan´eho pomoc´ı Stas, kter´e zajist´ı indentifikaci uˇzivatele a zkontroluje, zda m´a pˇr´ıstup pro danou operaci na repozit´aˇrem. Postup je tedy n´asledujic´ı:

• Uˇzivatel se autorizuje pomoc´ı sv´eho veˇrejn´eho kl´ıˇce serveru na kter´y se pˇripojuje.

• Spust´ı se Stas, kter´e podle kl´ıˇce zkontroluje uˇzivatele pˇripojuj´ıc´ıho se k repo- zit´aˇri.

• Stas zjist´ı, zda m´a dan´y uˇzivatel pr´avo k repozit´aˇri pˇristoupit.

(45)

• Stas zkontroluje o jakou ˇcinnost se bude jednat. Existuj´ı 2 typy (ˇcten´ı a z´apis).

• Stas povol´ı nebo zam´ıtne ˇcinost.

Aby bylo moˇzn´e pˇripojovat uˇzivatele pomoc´ı SSH protokolu, mus´ı Stas na- kop´ırovat veˇrejn´e kl´ıˇce vˇsech uˇzivatel˚u zadan´ych v Prestaciu do souboru

~/.ssh/authorized_keys.

(46)

5 N´ avod na pouˇ z´ıv´ an´ı a praktick´ e uk´ azky

5.1 Hockej

V t´eto kapitole bude pops´ano jak´ym zp˚usobem se pouˇz´ıv´a navrˇzen´y syst´em pro vytv´aˇren´ı a vykon´av´an´ı sestavovac´ıch skript˚u.

5.1.1 Instalace

Jedn´a se o samostatnou souˇc´ast, kter´a vyˇzaduje instalaci. Pro instalaci je nutn´e m´ıt nainstalovan´y Composer(https://getcomposer.org/), GIT(http://git-scm.com/) a PHP ve verzi vˇetˇs´ı neˇz 5.4. N´aslednˇe je tˇreba naklonovat repozit´aˇr s Hockejem z pˇriloˇzen´eho CD nebo z aktu´aln´ıho repozit´aˇre pomoc´ı pˇr´ıkazu

git@bitbucket.org:Tacoberu/hockej.git, pˇrepnout se do sloˇzky s naklonovan´ym hockejem a spustit Composer composer install. Hockej mus´ı b´yt um´ıstˇeˇn do ad- res´aˇre, kde bude glob´alnˇe spustiteln´y.

Napˇr´ıklad ln -s source/bin/hockej ~/bin/hockej.

5.1.2 Vytvoˇ ren´ı sestavovac´ıho skriptu

Definice katalog˚u, kter´e bude skript vyuˇz´ıvat se definuj´ı pomoc´ı elementu <catalog>

s povinn´ymi parametry from(zdroj katalogu) a as(jmenn´y prostor).

(47)

Nejjednoduˇsˇs´ı katalog m˚uˇze tedy vypadat n´asledovnˇe:

<?xml version="1.0" ?>

<hockej>

<description>First buildscript</description>

<version>1.2.3</version>

<catalog from="hockej://build-in/hockej/filesystem" as="fs" />

</hockej>

Skript si pˇri spuˇstˇen´ı inicializuje katalog ”filesystem”a pˇriˇrad´ı mu jmenn´y pro- stor ”fs”. Nic v´ıc vˇsak neudˇel´a. Je proto nutn´e definovat pˇr´ıkaz pomoc´ı elementu

<command>, kter´y bude moci Hockej spustit. Element mus´ı m´ıt nadefinovan´y atribut name, kter´y ˇr´ık´a jak´ym pˇr´ıkazem bude spuˇstˇen. Nadefinujme si tedy pˇr´ıkaz, kter´y zap´ıˇse do souboru ”priklad.txt”ˇretˇezec ”Hello, I’am Hockej!”. V´ysledn´y skript bude vypadat n´asledovnˇe:

<?xml version="1.0" ?>

<hockej>

<description>First buildscript</description>

<version>1.2.3</version>

<catalog from="hockej://build-in/hockej/filesystem" as="fs" />

<catalog from="hockej://build-in/hockej/core" as="core" />

(48)

<print from="fs.file-write">

<file from="fs.file">

<root from="fs.path">.</root>

<filename from="fs.file">priklad.txt</filename>

</file>

<content from="core.string">Hello, I’am Hockej!</content>

</print>

</command>

</hockej>

Po spuˇstˇen´ı sestavovac´ıho souboru pˇr´ıkazem ”hockej build”ve sloˇzce se skriptem Hockej zap´ıˇse text do souboru. Nyn´ı si podrobnˇe probereme, co jednotliv´e poloˇzky znamenaj´ı.

5.1.3 Vytvoˇ ren´ı vlastn´ıho katalogu

Pro pˇr´ıklad si, ale uvedeme definici katalogu v extern´ım souboru, kter´a bude prak- ticky stejn´a.

Extern´ı katalogy jsou definovan´e v souborech s n´azvem ”catalog.hockej”a jsou ve form´atu XML. Vytvoˇrme jednoduch´y katalog, kter´y n´am bude definovat cestu k souboru ”priklad.txt”:

<?xml version="1.0" encoding="UTF-8"?>

<catalog>

<id>routes</id>

(49)

<version>0.0.4</version>

<description>Cesta k~soubor˚um</description>

<catalog from="hockej://build-in/hockej/filesystem" as="fs" />

<catalog from="hockej://build-in/hockej/core" as="core" />

<catalog>

<my-file from="fs.file">

<root from="fs.path">.</root>

<filename from="core.string">priklad.txt</filename>

</my-file>

</catalog>

</catalog>

Pokud si nyn´ı pˇrid´ame do sestavovac´ı skriptu tento katalog, budeme m´ıt k dis- pozici nov´y element <my-file>.

Pomoc´ı <catalog from="hockej://project//routes" as="my" /> pˇrid´ame vlastn´ı katalog do skriptu a m˚uˇzeme pouˇz´ıvat n´asleduj´ıc´ı pˇredpis pro z´apis do souboru :

<command name="build">

<print from="fs.file-write">

<file from="my.my-file">

<content from="core.string">Hello, I’am Hockej!</content>

</print>

</command>

(50)

Soubor s katalogem by v tomto pˇr´ıpadˇe byl uloˇzen ve sloˇzce project/routes, kter´a by se nach´azela v koˇrenov´em adres´aˇri projektu. T´ım se d´a ulehˇcit opisov´an´ı stejn´ych konstrukc´ı pro nazv´an´ı souboru, vytv´aˇren´ı sloˇzek a ostatn´ıch.

5.1.4 Uk´ azka rozˇ siˇ rov´ an´ı definic

Napˇr´ıklad definice ”fs.file-write”zajiˇst’uje z´apis do souboru. Vytvoˇrili jsme tedy ele- ment s libovoln´ym n´azvem, kter´y dˇed´ı od definice ”fs.file-write”. Pˇr´ıkladem m˚uˇze b´yt element <print from="fs-file-write"> z minul´eho pˇr´ıkladu. Tato definice vyˇzaduje dalˇs´ı dvˇe definice:

• Soubor, do kter´eho se bude zapisovat. Jedn´a se o potomka definice ”fs.file”.

• Text, kter´y se bude zapisovat. Zde se bude jednat o potomka definice ”core.string”.

Tyto z´avislosti je moˇzn´e z´ıskat pomoc´ı parseru katalog˚u, ten je v grafick´e po- dobnˇe implementov´an v Prestaciu. Z´avislosti umoˇzˇnuj´ı vytv´aˇret sloˇzit´e struktury, kter´e se mohou r˚uznˇe pˇrekr´yvat. Tato vlastnost je kl´ıˇcov´a, kv˚uli kter´e byl Hockej vytvoˇren. Lze pˇreddefinov´avat jiˇz nastaven´e definice nebo je doplˇnovat. Nejl´epe si to m˚uˇzeme vysvˇetlit na pˇr´ıkladu se souborem, tedy s potomkem definice ”fs.file”, kter´y vyˇzaduje n´asleduj´ıc´ı definice:

• Koˇren - Potomek definice ”fs.path”

• Cesta - Potomek tˇr´ıdy ”fs.path”

• N´azev souboru - Potomek tˇr´ıdy ”core.string”

(51)

Jeho definice m˚uˇze vypadat n´asledovnˇe :

<soubor from="fs.file">

<path from="fs.path">/korenovy/adresar/</path>

<path from="fs.path">/cesta/dal/</path>

<filename from="core.string">nazev_souboru.txt</filename>

</soubor>

T´ım jsme vytvoˇrili definici, kterou m˚uˇzeme pouˇz´ıt k vytvoˇren´ı elementu <muj-soubor from="soubor" />.

Potˇrebujeme vytvoˇrit dalˇs´ı definici, ale chceme pouze zmˇenit jm´eno souboru. To lze uskuteˇcnit n´asledovnˇe:

<druhy-soubor from="soubor">

<filename from="core.string">jiny_nazev.txt</filename>

</druhy-soubor>

Tuto definici m˚uˇze opˇet pouˇz´ıt pomoc´ı elementu <jiny-sobour from="druhy-soubor">

a pˇredat definici pro z´apis do souboru a n´aslednˇe libovolnˇe mˇenit jej´ı pˇredky.

5.1.5 Spuˇ stˇ en´ı

Samotn´y Hockej se pˇri spr´avnˇe proveden´e instalaci spouˇst´ı pˇr´ıkazem hockej a pa- rametrem, kter´y ˇr´ık´a co m´a udˇelat:

• help - Zobraz´ı plnou n´apovˇedu.

• list - Zobraz´ı seznam vˇsech spustiteln´ych pˇr´ıkaz˚u. Atributy ”name”od vˇsech element˚u <command>.

(52)

• run <pˇr´ıkaz> - Vyhled´a v aktu´aln´ı sloˇzce soubor ”build.hockej”a spust´ı v nˇem pˇr´ıkaz. Napˇr´ıklad hockej run build.

• -f --buildfile <nazev_skriptu> - Specifikuje n´azev souboru se sestavo- vac´ım skriptem. Napˇr´ıklad hockej run build -f build-local.hockej.

• --xml - V´ystup ve form´atu XML. Napˇr´ıklad hockej run build --xml.

• --dry-run - Provede such´y bˇeh. Fyzicky se nic nevykon´a.

Napˇr´ıklad hockej run build --dry-run.

5.2 Prestacio

5.2.1 Instalace

Prestacio je webov´a aplikace, kter´a pro svoji instalaci vyˇzaduje webov´y server, kter´y obsahuje interpreter jazyk PHP pro verzi 5.4 a vyˇsˇs´ı. D´ale je nutn´y nainstalovan´y Composer a GIT. N´aslednˇe je tˇreba naklonovat repozit´aˇr s projektem z pˇrilozen´eho CD nebo z aktu´aln´ıho repozit´aˇre pomoc´ı pˇr´ıkazu

git clone git@bitbucket.org:Tacoberu/prestacio.git. Pˇrepnout se do sloˇzky s naklonovan´y projektem a spustit Composer pˇr´ıkazem composer install, t´ım se doinstaluj´ı vˇsechny z´avislosti. Jako posledn´ı krok je nutn´e vytvoˇrit instanci hosta v konfiguraci webov´eho serveru, kter´a bude odkazovat do sloˇzky webroot.

Souˇc´ast´ı instalace Prestacia je i instalace Stas.

5.2.2 Repozit´ aˇ re

Prestacio dok´aˇze hospodaˇrit s nˇekolika repozit´aˇri nez´avisle na sobˇe. U kaˇzd´eho repo- zit´aˇre je zobrazen jeho n´azev a pˇr´ıkaz, pomoc´ı kter´eho je moˇzn´e si vytvoˇrit lok´aln´ı ko- pii repozit´aˇre. Posledn´ı poloˇzka je stav repozit´aˇre, kter´y zn´azorˇnuje stav posledn´ıho

(53)

sestaven´ı aplikace. Pokud se sestaven´ı zdaˇrilo je zobrazena 1 v opaˇcn´em pˇr´ıpadˇe je zde nula.

Obr´azek 5.1: Seznam repozit´aˇr˚u

Zat´ım podporovan´e verzovac´ı syst´emy jsou GIT a Mercurial. Podle zkratek git a hg lze rozeznat, kter´ym verzovac´ım syst´emem je repozit´aˇr spravov´an.

Pomoc´ı tlaˇc´ıtka Add new repository je moˇzn´e pˇridat nov´y repozit´aˇr ke spr´avˇe.

Obr´azek 5.2: Pˇridat repozit´aˇr

V pˇrid´avac´ım formul´aˇri staˇc´ı zvolit n´azev repozit´aˇre a verzovac´ı syst´em, pomoc´ı kter´eho bude spravov´an. Vˇsechny tlaˇc´ıtka v Prestaciu jsou barevnˇe odliˇsen´e:

• Zelen´a - Vytvoˇren´ı nov´e prvku.

(54)

• Sed´ˇ a- Zobrazen´ı podrobnost´ı.

• Cerven´ˇ a - Smaz´an´ı prvku.

Po kliknut´ı na n´azev repozit´aˇre se otevˇre detailn´ı zobrazen´ı repozit´aˇre.

Obr´azek 5.3: Detail repozit´aˇre

Kde jsou vyps´any jednotliv´e ´udaje o repozit´aˇri:

• Name - Jm´eno repozit´aˇre.

• Url - Adresa, pomoc´ı kter´e je moˇzn´e repozit´aˇr naklonovat.

• Last tag - Posledn´ı pˇridˇelen´a znaˇcka.

• Last commit - Z´aznam o posledn´ı nahran´e zmˇenˇe. Obsahuje jm´eno uˇzivatele, kontroln´ı souˇcet v pˇr´ıpadˇe GIT, popisek zmˇeny a moˇznost zobrazit diferenci´aln´ı zobrazen´ı s pˇredchoz´ı zmˇenou.

• ACL - Omezen´ı pˇr´ıstupov´ych prav.

• Deploy status - Stejn´y v´yznam jako status v seznamu repozit´aˇr˚u a moˇznost zobrazit detailn´ı zpr´avy s v´ysledky sestavovac´ıho syst´emu.

• Buildscript - Odkaz na definov´an´ı vlastn´ıho sestavovac´ıho skriptu.

(55)

Obr´azek 5.4: Zmˇeny v repozit´aˇri

Pro lepˇs´ı pˇrehled v´yvoje k´odu je d˚uleˇzit´e vidˇet seznam vˇsech zmˇen, kter´e byly v repozit´aˇri provedeny. Prestacio obsahuje pˇrehledn´e zobrazen´ı, kter´e poskytuje z´akladn´ı informace o vˇsech zmˇen´ach, kter´e byly v k´odu provedeny. Vˇsechny tyto informace poskytuje verzovac´ı syst´em a Prestacio je pˇrev´ad´ı do pˇrehlednˇejˇs´ı po- doby. Na obr´azku 3.5 je vidˇet, ˇze Vojta T˚uma provedl zmˇenu s popisem: ”Buildset:

element offset generates objects out of canvas.”. Tato zmˇena byla provedena 2.dubna v 22:21. Po kliknut´ı na popis zmˇeny se zobraz´ı detailnˇejˇs´ı informace o zmˇenˇe.

Obr´azek 5.5: Detail zmˇeny

V detailn´ım popisu jsou zobrazeny jednotliv´e soubory, jejichˇz obsah byl v dan´e zmˇenˇe upraven. Konkr´etn´ı zobrazen´ı je z´avisl´e na pouˇzit´em verzovac´ım syst´emu, protoˇze v´ystup je generov´an pˇr´ımo verzovac´ım syst´emem. Na obr´azku 3.6 vid´ıme,

(56)

ˇze byl zmˇenˇen obsah souboru CanvasDirective.js. ˇR´adky, kter´e zaˇc´ınaj´ı znam´ınkem m´ınus ˇr´ıkaj´ı, ˇze byl dan´y ˇr´adek v souboru odebr´an. Naopak ˇr´adky zaˇc´ınaj´ıc´ı znam´enkem plus znaˇc´ı pˇrid´an´ı nov´eho ˇr´adku v r´amci zmˇeny.

5.2.3 Sestavovac´ı skript

Kaˇzd´emu repozit´aˇri je pˇriˇrazen jeden sestavovac´ı skript. Po kliknut´ı na odkaz ”Edit buildscript”v detailu repozit´aˇre se zobraz´ı okno s moˇznost´ı editace sestavovac´ı skriptu Hockeje.

Cel´e prostˇred´ı je rozdˇelen´e do 3 panel˚u:

• Lev´y - Definuje se v nˇem popisek, verze a katalogy, kter´e bude sestavovac´ı skript pouˇz´ıvat.

• Stˇredn´ı - Vkl´adaj´ı se do nˇej elementy, ze kter´ych se sestavuje v´ysledn´y skript.

Zobrazuje se v nˇem v´ysledn´e xml.

• Prav´y - Zobrazuj´ı se v nˇem moˇzn´e parametry element˚u.

Obr´azek 5.6: Pˇrid´av´an´ı katalog˚u

(57)

Nejdˇr´ıve vybereme v lev´em panelu katalogy, kter´e chceme pouˇz´ıvat. Jsou rozdˇelen´e na ”System”(vestavˇen´e) a ”Custom”(projektov´e a uˇzivatelsk´e). Nad stˇredn´ım pane- lem je liˇsta, na kter´e jsou 4 tlaˇc´ıtka:

• Add task - Pˇrid´a novou definici.

• Add command - Pˇrid´a nov´y pˇr´ıkaz.

• Graphic editor - Zobraz´ı sestavovac´ı skript v grafick´e podobˇe.

• Xml preview - Z grafick´e podoby vygeneruje v´ysledn´y XML soubor.

Novou definici pˇrid´ame kliknut´ım na tlaˇc´ıtko ”Add task”. Zobraz´ı se dialogov´e okno, ve kter´em zvol´ıme z jak´eho katalogu chceme definici vyb´ırat, n´aslednˇe vybe- reme danou definici a klikneme na tlaˇc´ıtko pro pˇrid´an´ı definice do grafick´eho editoru.

Obr´azek 5.7: Pˇrid´av´an´ı definice

Po vloˇzen´ı se zobraz´ı element v grafick´em editoru. Na lev´e stranˇe m´a definice, kter´e vyˇzaduje, aby mohl spr´avnˇe pracovat. Na prav´e stranˇe jak´y jeho v´ystup. Na lev´e stranˇe vid´ıme, ˇze vyˇzaduje parametr ”root”, kter´y je typu ”path”. Podle n´azvu zjist´ıme, ˇze se bude zˇrejmˇe jedna o koˇrenov´y adres´aˇr. Dalˇs´ı dva parametry jsou opˇet typu ”path”. Jeden je relativn´ı cesta od koˇrene d´ale a druh´y je n´azev souboru.

V´ystup na prav´e stranˇe ukazuje, ˇze z toho elementu je moˇzn´e z´ıskat definici typu

References

Related documents

Pˇredloˇ zen´ a disertaˇ cn´ı pr´ ace se zab´ yv´ a adaptac´ı existuj´ıc´ıho syst´ emu automatick´ eho rozpozn´ av´ an´ı ˇreˇ ci (ASR) pro dalˇs´ı jazyky.. Zamˇ eˇruje

Kromˇ e fin´ aln´ı verze, kter´ a komplexnˇ e zpracov´ av´ a veˇsker´ e dan´ e poˇ zadavky, vzni- kala souˇ casnˇ e i verze, kter´ a fungovala bez pouˇ zit´ı detektoru

Na obr´ azku 4.35 je zobrazeno porovn´ an´ı akustick´ eho tlaku nad nosn´ıkem uni- morf (bez elektrod i s elektrodami vych´ az´ı nad nosn´ıkem velice podobn´ y akustick´ y

Ke kaˇ zd´ emu videu pouˇ zit´ emu pˇri testov´ an´ı byly hod- noty poˇ ctu osob, kter´ e proˇsly a poˇ ctu unik´ atn´ıch osob, kter´ e se ve videu objevily tak´ e

Za pˇ redpokladu ´ uspˇ eˇ sn´ eho otestov´ an´ı by n´ asledovalo vyuˇ zit´ı odhadnut´ eho a verifikovan´ eho modelu pro predikci, nebo bliˇ zˇ s´ı anal´ yzu zkouman´

Potlaˇ cov´ an´ı odezvy existuj´ı dva druhy, Network Echo Cancellation (potlaˇ cov´ an´ı odezvy v s´ıt’ov´ ych sign´ alech) a Acoustic Echo Cancellation (potlaˇ cov´

Uveden´ a simulace je zaloˇ zena, jak jiˇ z bylo zm´ınˇ eno, na opakovan´ em gene- rov´ an´ı n´ ahodn´ ych dat, na kter´ ych se prov´ ad´ı dan´ y algoritmus a jsou

Data, kter´ a jsou testov´ ana, se t´ ykaj´ı 2 nejvyˇsˇs´ıch kategori´ı cyklistick´ ych z´ avod˚ u, a poˇ cet startuj´ıc´ıch z´ avodn´ık˚ u je velmi podobn´ y,