Powszechnym scenariuszem jest to, że baza kodu produktu przechowywanego przez repozytorium w pewnym systemie VCS ewoluuje do tego stopnia, że podstawa kodu może być prawdopodobnie postrzegana jako zawierająca kilka produktów. Podział bazy kodowej na kilka repozytoriów VCS, z których każde dedykowane jest pojedynczemu produktowi, może wykorzystać kilka korzyści (patrz Korzyści z posiadania produktu na repozytorium VCS w porównaniu z modelem repozytorium wzdęcia poniżej). Od strony technicznej podział bazy kodu jest dość łatwym krokiem, ponieważ większość VCS obsługuje tę operację. Podział może jednak powodować problemy inżynieryjne związane z automatycznymi testami, ciągłą dostawą, integracją usług lub monitorowaniem (patrz Problemy zgłaszane przez podział).) Organizacje planujące dokonać takiego podziału muszą zatem wiedzieć, jak przeprowadzić to przejście tak płynnie, jak to możliwe, to znaczy bez przerywania procesu dostarczania i monitorowania. Pierwszym krokiem tego jest prawdopodobnie lepsze zrozumienie pojęcia projektu i jak nakreślić podział w monolitycznej bazie kodu.
W odpowiedziach na te pytania chciałbym zobaczyć:
Próba podania funkcjonalnej definicji tego, czym jest produkt, co daje praktyczne kryteria rzeczywistego wytyczenia produktów w istniejącej bazie kodu.
Zgodnie z tą roboczą definicją opracuj plan, który faktycznie dokonuje podziału. Możemy uprościć założenie, że podstawa kodu jest przetwarzana przez w pełni zautomatyzowaną sdlc implementującą ciągłą integrację i ciągłe dostarczanie . Oznacza to, że każda gałąź jest sprawdzana przez zautomatyzowane oprogramowanie testowe zaimplementowane w bieżącej bazie kodu, a każde połączenie z jakąś „magiczną” gałęzią generuje artefakty produktu, które są testowane i wdrażane. ( Artefakty produktu to np. Źródłowe pliki archiwów , dokumentacja, binarne pakiety oprogramowania, obrazy Docker , AMI, unikernele).
Taki plan jest satysfakcjonujący, jeśli wyjaśnia, w jaki sposób można go obejść
Problemy podniesione przez podział
Jak zautomatyzowane procedury testowe odnoszą się do wcześniej istniejącego repozytorium monolitycznego i repozytoriów podzielonych?
Jak zautomatyzowane procedury wdrażania odnoszą się do wcześniej istniejącego repozytorium monolitycznego i repozytoriów podzielonych?
Gdzie jest przechowywany kod samych procedur automatycznego wdrażania?
Gdzie są przechowywane infrastruktury , strategie monitorowania i wysokiej dostępności ?
Jak upewnić się, że programista potrzebuje tylko jednej bazy kodowej na raz (ale możliwe użycie artefaktów z innych baz kodowych).
Jak narzędzie takie jak git-bisect
Uwaga marginalna: Korzyści z posiadania produktu na repozytorium VCS w porównaniu z modelem repozytorium wzdęcia
Posiadanie kilku małych repozytoriów przechowujących bazę kodu dla konkretnego produktu ma następujące zalety w porównaniu z podejściem „repozytorium wzdęć”:
W przypadku repozytorium nadęć trudno jest wycofać wydanie, gdy produkt jest niestabilny, ponieważ historia jest mieszana z inną historią produktu.
W przypadku nadętego repozytorium trudno jest przejrzeć historię projektu lub wycofania, w przypadku małych repozytoriów bardziej prawdopodobne jest przeczytanie tych informacji. (Może to być specyficzne dla VCS, takich jak git, gdzie w przeciwieństwie do svn, nie możemy wyrejestrować poddrzew!)
Z repozytorium wzdęć musimy się rozwijać, kiedy rozwijamy się. Jeśli mamy N repozytoriów, możemy pracować równolegle na N gałęziach, jeśli mamy tylko 1 repozytorium, możemy pracować tylko na jednej gałęzi lub mieć mnóstwo kopii roboczych, które również są kłopotliwe w obsłudze.
W przypadku kilku małych repozytoriów dzienniki przedstawiają mapę cieplną projektu. Mogą być nawet używane jako proxy do rozpowszechniania wiedzy w zespole deweloperów: jeśli nie popełniłem repo X od 3 miesięcy, dobrze byłoby przydzielić mnie do zespołu pracującego nad repo X, aby być na bieżąco z rozwojem w tym komponencie.
Dzięki małym repozytoriom łatwiej jest uzyskać przejrzysty przegląd komponentu. Jeśli wszystko idzie w jednym dużym repozytorium, nie ma żadnego namacalnego artefaktu wyznaczającego każdy element, a baza kodów może łatwo dryfować w kierunku dużej kuli błota .
Małe repozytoria zmuszają nas do pracy nad interfejsami między komponentami. Ale ponieważ chcemy mieć dobrą kapsułkę, i tak powinniśmy to zrobić, więc uznałbym to za zaletę dla małych repozytoriów.
Dzięki kilku małym repozytoriom łatwiej jest mieć kilku właścicieli produktów.
Dzięki kilku małym repozytoriom łatwiej jest mieć proste standardy kodu, które odnoszą się do pełnego repozytorium i które mogą być automatycznie weryfikowane.