Hogyan kövessök a softwerünk változásait, ha azt rendszeresen át is kell adni egy ügyfélnek? Milyen stratégiákból választhatunk, ha CVS-t, SVN-t, vagy GIT-et használunk?
2009-es web konferencián tartott előadásom fóliái.
1. Termék életciklus és
a verziókezelés
Nagy Attila Gábor
Wildom Kft.
Magyarországi Web Konferencia 2009
2. Ügyfél igények
●
Jól ismert három környezet:
– Fejlesztői
– Teszt
– Éles
●
Átlátható verziók
●
Visszaállás lehetősége
3. Web környezet
problémái
●
Release early, release often
●
Környezet kialakítása
erőforrásigényes
●
Éles környezetben is adódhatnak
változtatási igények
●
Hibajavításokat gyorsan kell
átvezetni
●
Adott termék több ügyfélnél is
lehet telepítve (esetlegesen más
verziók)
5. Termékben
implementálva
●
Saját modul kezelő implementálása
– Elegáns megoldás
– Minden telepítés egyedileg állítható
össze
– Aktuális állapot átlátható
– Akár az ügyfél is frissíthet
6. Hátrányai
●
Bonyolult megírni
●
Alap rendszer frissítése?
– Erre külön frissítés kezelő kell
●
Fejlesztés alatt a belső verzió
kezelést nem helyettesíti
Ajánlott: ha sok ügyfelet szolgál ki
egyetlen termék
8. Hatalmas választék
Team Foundation
CVS Server
ClearCase
Subversion
Bazaar Darcs
Git
Mercurial
BitKeeper
9. Commit log!! Tippek az induláshoz
Commit log!!
●
Minden környezet azonos
forráskódot használjon
– Konfiguráció nem verzió kezelt
– Környezet függő konfigurációk
●
Rendszeres commitolás
●
Csak tiszta kódot commitoljunk
– Ignore fájlok, akár projekt szinten
●
Minimális változtatás elve
●
Conflictok kezelését ismerni
10. CVS
●
Ajánlott elfelejteni
– Könnyű áttérni róla Subversion-re
●
Branch kezelés gyenge
●
Nagyobb projektet nehéz átlátni
– History fájl szinten van csak
– Véletlen update után nehéz
visszaállni
●
Tag-ek viszont jól használhatóak
benne
11. Éles és fejlesztői
környezet CVS-ben
●
Külön tag az éles verziónak
– Bármikor kialakítható, éles siteon:
●
cvs tag LIVE
●
Fejlesztői verziók tag nélkül
●
Élesítés esetén áttesszük a tag-et:
– cvs tag -F LIVE
– cvs update
12. Értékelés
Előnyök Hátrányok
●
Megakadályozza a ●
Éles site-on
véletlen update-ket történt
módosításokat
●
Bármikor könnyen
nehéz
újrahúzható az éles
commitolni
környezet
●
Release tudatos
döntés eredménye
13. Subversion
●
Legelterjedtebb eszköz
●
Könnyen megtanulható
●
CVS hibáit kijavították
●
Használható branch-ek
●
Revíziók meghatározzák a projekt
állapotát adott időpontban
●
Rugalmasabb mint a CVS
14. Párhuzamos ágak
●
Intuitív
●
Gyakori
élesítésnél jobban
megfelel
●
„Csak előre”
szemlélet
●
Nincsenek
dedikált releasek
●
Nem kell
„újratelepíteni”
18. Megjegyzések
●
Jóval kevesebb merge
●
Könnyű elfeledkezni arról, hogy új
release-t hozzunk létre →
párhuzamos branch-ek
●
Minden release „új telepítés”
– vagy: svn switch
●
Nem egyértelmű, hogy mi kerülhet
a release-be, és mi nem
– Fontos a jó policy
– Fontos azt betartatni
19. Merge tracking
●
Fontos tudni, hogy mely revíziókat
mergeltük már
– Többszörös merge conflict-ot okoz
●
SVN még nem igazán erős ebben
– 1.5.0 előtt nem volt SVN-ben
●
svnmerge: python script
– 1.5.0 óta mergeinfo
●
trunk → branch bármikor
●
branch → trunk csak egyszer
– „reintegrate”
20. Elosztott verzió
kezelő rendszerek
●
Hatékony branch-merge támogatás
– Linus: „a merge a lényeg,
branchelni mindenki tud”
●
Lokális branch-ek
●
Nagy szabadság
●
Implicit backup
●
Git, Mercurial, Bazaar
http://www.youtube.com/watch?v=4XpnKHJAok8
21. Hátrányok
●
Nehéz megtanulni
●
Sok branchet eredményezhet
– Kell egy jó rendező elv
●
Hol a legfrissebb kód?
●
Több idő megy el kód
managementre
22. Bizonytalan ügyfél
?
? probléma
3
3 ●
Revertelni nem lehet,
Jelmagyarázat
Jelmagyarázat
Még fontosabb
Inkább hagyjuk...
3
3 mert értékes
tartalom
feature
2
2
Mégsem olyan
Bocs, mégis sürgős
Nagyon sürgős
sürgős feature
feature
1
Egész ügyes, de...
Általános fejlesztés
1 ●
Mergelni sem lehet
4
4
2
2
●
Cherry pick
1
1 – Nehezen átlátható
3
3 – Kimaradhat valami
2
2 – Egy commit több
1
1 feature :(
R
R
23. Feature branch
●
Egy feature – egy
R
R
branch
R
R
4 4
●
Bármikor
4 4
tetszőleges release
3
3 3
3 3
3 3
3
összeállítható
2
2 2
2 2
2 2
2
1
1 1
1 1
1 1
1
●
Mindig lehet
commitolni
R
R
●
Kisebb brancheket
könnyebb átlátni
24. Ideális struktúra
●
Projekt eleje
szerteágazik
●
Release-ek egyesítik
a korábbi branche-
eket
●
Maradhatnak
oldalágak
– Nem került be a
releasebe
25. Tesztkörnyezet
●
Ügyfél nem
akarja/tudja a branch-
eket külön látni
next
●
Nincs több
környezetünk
●
Speciális demo branch
●
Bármikor
szétszedhető
●
Release-candidate
26. Tudnivalók
●
Megvalósítható Subversionnel
– Git, Mercurial erősebb ebben
●
Projekt elején néha célszerűbb
eltekinteni tőle
●
Lehetőleg minden feature külön
branchbe kerüljön
– Ha egymásra épülnek, akkor az új
branch az előzményből
származzon
28. Release management
eszközök
●
Maven, php-maven, Hudson
●
Fordító nyelveknél előnyös
– Java
●
Maven tudja, hogy mit, honnan kell
összeszedni
– Repository szabadon használható
●
Build során megkerülhetetlen
– Nehezítheti a tesztelést
●
Pl: JavaScript, CSS
29. Összefoglaló
●
Befektetés
●
Mi felel meg nekünk legjobban?
– Eszköz
– Szakértelem
– Publikálási gyakoriság
– Telepítések száma
– Kapcsolat az ügyfelünkkel