Jestem kontrahentem, który niedawno rozpoczął działalność w firmie.
Zespół składa się z 3 programistów składających się z 2 deweloperów poziomu średniego i średniego, wkrótce inny na tym samym poziomie i ja (6 lat doświadczenia). Dla obu obecnych programistów jest to ich pierwsza praca poza uniwersytetem / uczelnią i nigdy wcześniej nie mieli wyższego programisty nadzorującego ich pracę.
Nie ma wyraźnych zasad kontroli wersji. Programiści wykonują wszystkie prace programistyczne w bagażniku, a następnie wdrażają do produkcji bezpośrednio ze swoich maszyn programistycznych. Istniejący zespół nie zna rozgałęzień.
Zmieniam to wszystko i wprowadzam CI, serwery testowe / testowe / produkcyjne itp., Wraz z polityką kontroli wersji, aby to uzupełnić.
System kontroli źródła to TFS, z którego nigdy wcześniej nie korzystałem. Jest skonfigurowany jako jedno gigantyczne repozytorium.
Zapisałem dla nich kilka wskazówek, ale czy jest coś jeszcze, co powinienem dodać / zmienić, mając na uwadze doświadczenie zespołu?
Polityka kontroli wersji
Rozwój odbywa się na pniu
Jeśli szacuje się, że zmiana potrwa dłużej niż tydzień, należy to zrobić na gałęzi, z regularnymi połączeniami z pnia do gałęzi, aby zatrzymać dwie synchronizacje.
Zwolnij gałęzie utworzone dla kodu produkcyjnego. Ta gałąź powinna zawierać tylko stabilny kod. Możemy mieć jedną gałąź wydania, która jest aktualizowana z pnia raz na sprint, lub możemy utworzyć oddzielną gałąź wydania na każdy tydzień.
Jeśli konieczne jest pilne usunięcie błędu wpływającego na kod produkcyjny, zostanie on wykonany w gałęzi wydania i ponownie włączony do linii głównej.
Jeśli zastosujemy strategię jednej gałęzi wydania, pień zostanie scalony z gałęzią wydania raz na sprint pod koniec sprintu.
Jeśli zastosujemy oddzielną gałąź dla każdej strategii wydania, to bagażnik NIGDY nie zostanie scalony z gałęzią wydania
W niektórych scenariuszach może być konieczne dwukrotne usunięcie błędu w różnych gałęziach, jeśli gałęzie są zbyt rozbieżne. Jeśli wykonujemy krótkie sprinty, nie powinno to zdarzać się zbyt często.
Planuję mieć trzy serwery. Środowisko testowe, w którym zawsze działa najnowszy kod w repozytorium. Środowisko pomostowe, w którym działa najnowszy kandydat do wydania w wersji pomostowej / testowej Kod kandydujący do wydania i cele UAT oraz środowisko produkcyjne.
Powodem, dla którego planuję to zrobić, jest to, że do tej pory klient robił tylko oprogramowanie wewnętrzne. Najnowszy projekt jest dla głośnego klienta medialnego i mam wrażenie, że zespół musi przyjąć bardziej profesjonalny model rozwoju niż to, co robi obecnie.
Na przykład w tej chwili użytkownik może zadzwonić do zespołu z raportem błędu. Deweloperzy lokalizują i naprawiają błąd, wykonują szybki test gałki ocznej na własnych komputerach, a następnie wdrażają bezpośrednio do produkcji. Żadnych automatycznych testów ani nic takiego.
Z perspektywy czasu myślę, że gałąź funkcji jest o krok za daleko i usunę ją.
Zasadniczo sprowadza się to do: a) braku rozgałęzienia w ogóle) b) gałęzi wydania i pnia, oraz c) gałęzi wydania na wydanie i pnia.
Pochylałem się w kierunku tego drugiego. Początkowo myślałem, że będę mieć zarówno kandydata do wydania, jak i wydanie, które będą działały jednocześnie na osobnych serwerach (UAT / Production), ale faktycznie magistrala jest kandydatem do wydania w dowolnym momencie, więc oddział na wydanie skłania się ku szaleństwu. Moją jedyną myślą byłoby, gdybyśmy nie chcieli, aby nasi interesariusze widzieli kod programistyczny, moglibyśmy potrzebować oddzielnej gałęzi kandydatów do wydania, ale YAGNI i tak dalej .....