Jaki jest Twój ulubiony przepływ pracy przy wdrażaniu aplikacji internetowych w SVN?

Obecnie używamy nieco skomplikowanej konfiguracji wdrożenia, która obejmuje zdalny serwer SVN, 3 gałęzie SVN dla DEV, STAGE i PROD, promując Kod między nimi poprzez łatki itp. Zastanawiam się, czego używacie do wdrożenia w małej sytuacji zespołu programistów?

Author: Graeme Perrow, 2008-08-06

11 answers

Kufer dla rozwoju, a oddział (produkcja) dla rzeczy produkcyjnych.

Na mojej lokalnej maszynie mam VirtualHost, który wskazuje na gałąź tułowia, aby przetestować moje zmiany.

Każdy commit do trunk uruchamia hook commit, który eksportuje svn i synchronizuje się z adresem dev serwera online - więc jeśli strona jest stackoverflow.com następnie ten hook automatycznie aktualizuje dev.stackoverflow.com

Następnie używam svnmerge do scalania wybranych łatek z truna do produkcji w moim lokalnym checkouts. Mam VirtualHost ponownie na mojej lokalnej maszynie, wskazując na gałąź produkcyjną.

Kiedy zatwierdzam scalone zmiany do gałęzi produkcyjnej, ponownie hak eksportu SVN aktualizuje eksport produkcji (na żywo) i strona jest na żywo!

 15
Author: Thomas Vander Stichele,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 23:45:56

Kiedy pracowałem w małym zespole programistów (czyli ja, inny programista i szef), to był całkiem chaotyczny bałagan. Okazało się jednak, że przypisanie procesu typu "gatekeeper" działało dla nas.

Gatekeeper był osobą, która wykonała najwięcej pracy nad aplikacją(w tym przypadku miałem 2 projekty, które opracowałem od podstaw, on miał jakieś 4).

W zasadzie, kiedy musiał pracować nad moimi projektami, powiadamiał mnie, że wykonuje pracę, upewniałem się, że repozytorium jest up-to-date i buildable, następnie on pociągnąć w dół, wprowadzić swoje zmiany, a następnie commit. Informowałby mnie, że to się stało, ja ciągnę, buduję i rozmieszczam. Jeśli były zmiany DB, mieliśmy folder DB Change ze wszystkimi skryptami, które poprawiałyby DB.

To oczywiście ma wiele dziur w nim, ale proces pracował dla nas, i trzymał nas od budowania nad sobą.

 3
Author: James Hall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 17:18:58

Nie miałem żadnych problemów z organizacją common tags/branches/trunk.

Ogólny rozwój dzieje się w bagażniku.

Utrzymanie wydania w produkcji odbywa się w odpowiedniej gałęzi wydania.

Zmiany w release branch, które są nadal istotne dla trunk są scalane.

Gdy nowa wersja jest gotowa do wdrożenia, jest oznaczana z trunk, a następnie z tego tagu tworzona jest gałąź. Nowa gałąź wydania jest sprawdzana na serwerze, równolegle do aktualnego wydania. Gdy nadszedł czas na przełączenie, ścieżki są żonglowane ("MV appdir appdir.old & & mv appdir.new appdir").

Deweloperzy wspierający wydanie produkcyjne następnie svn przełącza swoją kopię roboczą do nowej gałęzi, lub zrobić z niej nowy checkout.

 3
Author: Trevor Bramble,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 14:17:08

Trzy gałęzie brzmią jak dodatkowa praca.

Różnice środowiskowe mogą być obsługiwane przez posiadanie różnych wersji odpowiednich plików w bagażniku. tj. bazy danych.yml & database.yml.prod. Proces wdrażania powinien być świadomy środowiska i po prostu skopiować pliki per-environment nad domyślnymi.

 3
Author: Andrew Peters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 23:21:30

Prosta gałąź tułowia zawiera najbardziej aktualny kod, a następnie tnie gałąź za każdym razem, gdy wchodzimy na żywo. Wygląda na to, że to działa całkiem skutecznie. Możesz łatwo przejść do poprzedniej gałęzi, gdy bieżąca gałąź, którą wyciąłeś dla systemu live, zawiedzie. Ponadto, łatwo jest naprawić błędy w gałęzi, która jest obecnie aktywna, a ponieważ gałąź skutecznie umiera podczas wycinania nowej, istnieje tylko 1 prawdziwa gałąź, nad którą musisz pracować (a następnie scalić poprawki stamtąd do gałęzi aktywnej).

 2
Author: Mike Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 16:53:36

Nie używamy gałęzi do testowania rzeczy związanych z Internetem; tylko do testowania eksperymentalnych rzeczy, które zajmie dużo czasu (czytaj: więcej niż dzień), aby połączyć się z powrotem w trunk. Bagażnik, w stylu "ciągłej integracji", reprezentuje (miejmy nadzieję) działający, aktualny stan.

Tak więc większość zmian trafia prosto do bagażnika. A CruiseControl.NET serwer automatycznie zaktualizuje się na komputerze, który również uruchamia IIS i ma aktualne kopie wszystkich dodatkowych zasobów witryny dostępnych, więc witryna może być w pełni, czysto przetestowana w domu. Po przetestowaniu pliki są przesyłane na serwer publiczny.

Nie powiedziałbym, że jest to idealne podejście, ale jest proste (a tym samym odpowiednie dla naszych stosunkowo małych pracowników) i stosunkowo bezpieczne, i działa dobrze.

 1
Author: Sören Kuklau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-17 18:52:14

Trunk zawiera aktualną "podstawową" bazę programistyczną.

Programista często tworzy indywidualną gałąź dla każdego średnio - i długoterminowego projektu, który mógłby podłączyć bazę kodu trunk i przeszkodzić innym programistom. Kiedy będzie gotowy, połączy się z powrotem w trunk.

Tworzymy tagowane wydanie za każdym razem, gdy wciskamy kod do produkcji. Folder w /tags to po prostu Numer wersji.

Aby wdrożyć do produkcji wykonujemy eksport SVN do Staging. Kiedy to satysfakcjonujące używamy prostego rsync do wdrożenia do klastrów produkcyjnych.

 1
Author: Shane H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 06:10:35

Gorąco polecam książkę (currently in rough cuts) Continuous Delivery , która opisuje pełny proces zarządzania dostarczaniem oprogramowania, oparty m.in. na zasadach ciągłej integracji.

Zdecydowanie nie podoba mi się podejście branch and merge, ponieważ może być bardzo brudne i jest dość marnotrawne, ponieważ spędzasz czas na działaniach, które nie dostarczają żadnej nowej wartości. Już raz opracowałeś, przetestowałeś i naprawiłeś swój kod, po co tworzyć sytuację (kopiowanie kodu do innej gałęzi) co wymaga ponownego wykonania tej pracy?

W każdym razie, sposobem na uniknięcie rozgałęzień i scalania jest budowanie zdalnych artefaktów z tułowia i promowanie zbudowanych artefaktów (a nie źródeł), gdy przechodzą testy, staging itp. W ten sposób Masz 100% pewność, że to, co wprowadzasz do produkcji, jest tym samym, co przetestowałeś.

Jeśli masz różne funkcje, które mogą wymagać wydania w różnych terminach, Zmień podejście do sposób implementacji (konfigurowania funkcjonalności lub jeszcze lepiej modułowej) może pomóc w utrzymaniu pojedynczego pnia programistycznego.

 1
Author: Kief,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-30 12:41:39

Używamy rozgałęziania wydania - wydaje się to dla nas bardziej efektywne niż rozgałęzianie funkcji, które wykonywaliśmy.

Nie twórz różnych gałęzi dla różnych środowisk.

 0
Author: Polsonby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 23:50:45

Ja osobiście pracuję lokalnie( rozwój), dodaję / naprawiam funkcje i kiedy wydaje mi się, że jest gotowe, angażuję się w trunk (produkcja). Na serwerze produkcyjnym robię tylko aktualizację svn.

 0
Author: knoopx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 11:58:30

Pracuję z sytuacją podobną do tej, którą obecnie masz. Miałem za zadanie znaleźć "lepsze" rozwiązanie i przebiegało to w następujący sposób.

Live branch reprezentuje serwery w ich aktualnym stanie.

Wszelkie prace rozwojowe powinny być wykonywane w gałęzi, która jest pobierana z live. Może to być półgodzinna praca dla jednej osoby lub całoroczny projekt wieloosobowy. Tak często, jak lubi się zmiany na żywo mogą być scalane w tych gałęziach rozwoju.

Zanim utwór zostanie udostępniony, zmiany z live są ponownie scalane i są oznaczane jako potencjalne wydanie. Ta wersja jest testowana w środowisku przejściowym i jeśli przejdzie testowanie, nowa wersja live jest pobierana z tagu.

Możliwe jest połączenie kilku kawałków pracy w jedno wydanie, jeśli to działa lepiej.

Oznacza to, że jest to dość proste, aby utrzymać gałęzie rozwoju na bieżąco z live, a jeśli kawałek pracy w rozwoju zostanie usunięty, jest minimalna sprzątanie do zrobienia.

Aby przejść od pracy nad jednym projektem do drugiego, programista może po prostu zmienić swoje lokalne środowisko pracy na inną gałąź.

Jednym z problemów, jaki mieliśmy z systemem, jak opisujesz, jest to, że DEV może dość szybko się wycofać z PROD, więc nie rozwijasz się na żywo i nie jest łatwo dostrzec zależności między sobą aż do etapu. Powyższe rozwiązanie rozwiązuje te problemy, jednocześnie pozostając dość lekkim.

 0
Author: Jeremy French,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-04 13:01:04