Dany projekt se sklada z "fazi". Kazda faze sestava ze "zdroju". Vsechny faze daneho projektu se musi skladat ze stejnych zdroju (stejnych typu). Napriklad typicky web se bude skladat z: - instance CBS + adresar v htdocs - instance WWW A v ramci jednoho projektu budou jednotlive faze mit ruznou verzi svych zdroju. Napriklad CBS revizi X a WWW verzi y. Kazdy typ zdroje ma nejake vlastnosti, ktere jsou v ramci projektu "pevne", napriklad instance WWW ma id WWW dat. Dale ma kazdy zdroj svou aktualni verzi. U CBS je to SVN revize, u WWW dat je to seq initu (ci jak se to jmenuje). V kazde fazi je receno, ktere zdroje smi byt externe meneny a ktere ne. System sam kontroluje, kterym zdrojum se (bez vedomi modulu) zmenila revize (treba nekdo udelal neopravnene update rucne apod.) U nekterych zdroju je to povolene (treba ve fazi dev), u jinych je to zakazane a system na zmenu upozorni velkym ruzovym vykricnikem a nedovoli s projektem dal pracovat, dokud to obsluha nevyresi. Dale jsou definovane povolene prechody. Prechod ma zdrojove zdroje a cilovou fazi. To znamena, ze system pri prechodu vezme vsechny source zdroje (mohou byt z ruznych fazi) a kazdy z nich transformuje do destination zdroje ciloveh faze, to vse v kompletni transakci. Pro kazdy prechod jsou dale definovane podminky, za jakych muze k prechodu dojit: - uzivatele, kteri musi prechod schvalit - "karantena", tedy minimalni doba od schvaleni prechodu po fyzicke provedeni - atd. Aby doslo k prechodu, zalozi se tzv. akce. V ramci akce se definuje o ktery prechod pujde a od te chvile se zadny ze source zdroju nesmi zmenit az do okamziku, kdy se prechod fyzicky provede. Datove: ------- [resource_type] typ zdroje (napevno ve zdrojaku) - id [project] projekt - id [project_resource] projekt_zdroj - id projektu - id typu zdroje [phase] faze - id projektu [resource] zdroj - id faze - id projekt_zdroj - present / not present - povolit externi zmenu - povolene nativni akce typu - pevne vlastnosti specificke pro typ zdroje (id webu apod.) - posledni znamy version string (SVN revize, seq www dat apod.) [transition] prechod - id projektu (redundantni, ale uzitecne) - dst faze - seznam uzivatelu, jejichz palec je potreba k provedeni prechodu - minimalni doba pred provedenim [transition_source] prechod_zdroj (seznam src zdroju) - id prechod - id zdroj [build] akce - id - id prechod - stav (naplanovana, provedena, failed...) - datum zahajeni - datum, kdy byly splneny podminky - datum, kdy ma dojit k provedeni [build_log] akcelog - id akce - typ zaznamu (palec nahoru, palec dolu, komentar, success, fail, zmena source, odklad...) - data specificka pro ruzne typy zaznamu Jinymi slovy: Kazdy projekt ma sve faze. Pro projekt je definovane, z jakych zdroju (projekt_zdroj) se kazda faze sklada. Prechod pak vlastne jen bere cilovou fazi a rika, ktery jeji zdroj se odkud vezme. Aby mohlo dojit k prechodu, musi se zalozit "akce" a v ni se postupne uzivatele vyjadruji k tomu, jestli ano nebo ne atd. Nakonec se samotny prechod atomicky provede. Typy zdroju: ------------ 1. Instance CBS Pevne parametry: - Version string: "cbs:" Mozne akce: svn update na revizi XY Build: atomicky svn update do adresare "cbs__" 2. Instance WWW Pevne parametry: id instance WWW Version string: "www::" Mozne akce: - Build: klasicke atomicke data copy Kazdy typ zdroje musi umet: - overit aktualni fyzicky version string - provest atomicky build, vratit uspech / neuspech a pridat info do logu - ...?