Udostępnianie części monorepo

12

Obecnie mamy złożony i nieefektywny system kompilacji składający się z wielu repozytoriów SVN i Git (po około 50%), w tym repozytorium podmodułów git. Mamy też domowe skrypty, które lepiej lub mniej dobrze zarządzają całym procesem.
Głównym punktem naszej bazy kodu (zamkniętego źródła) jest to, że jest ściśle powiązana, a każdy projekt jest wydawany w tym samym czasie w tej samej wersji.

Chcemy przenieść to do prostszego systemu i pojedynczego VCS i rozważamy kilka opcji, w tym: podmoduły git, Google Repo i monorepos. Ostateczny VCS nie jest jeszcze zdefiniowany (z wyjątkiem opcji, które go nakazują) i może być svn, git, a nawet coś innego, jeśli to lepiej pasowałoby do naszej sytuacji.

Próbujemy wymienić plusy i minusy każdego rozwiązania, a jednym z głównych problemów, jakie mamy obecnie w przypadku monorepos, jest to, że udostępnianie niektórych modułów zewnętrznemu podmiotowi nie wydaje się łatwe, a nawet możliwe. Chcemy, aby osoby te mogły kasować i normalnie pracować na tych modułach, ale nie miały dostępu do kodu ani historii reszty repozytorium. W tej chwili nie robimy tego często ani szeroko, ale możemy w przyszłości i nie chcemy, aby stało się to koszmarem, ponieważ podjęliśmy tutaj złą decyzję.

Czy taki system zarządzania uprawnieniami istnieje w systemie VCS?
Czy jest jakiś sposób na złagodzenie tego problemu?

Leherenn
źródło
Czy rozważysz serwer lub usługę Team Foundation? Obsługuje Git i zawiera niezły przepływ pracy oraz funkcje ciągłej integracji
hanzolo,
Którą dokładnie implementację monorepo rozważasz?
Dan Cornilescu,

Odpowiedzi:

3

Z twojego opisu, myślę, że masz tutaj kilka opcji:

  1. Korzystaj z submodułów git - dzięki usłudze takiej jak GitHub (lub cokolwiek innego) możesz zarządzać uprawnieniami dla poszczególnych projektów i rozdzielić proces wdrażania. Jednak słyszałem, że z czasem podmoduły git stają się ogromnym bólem. Zautomatyzowane skrypty do czystego ponownego inicjowania / ponownego pobierania podmodułów git mogą tutaj pomóc.
  2. Podziel swoje repo na niezależne usługi. Pozwala to na równoczesny rozwój, ale także powoduje wiele bólu, ponieważ musisz zacząć myśleć o wykrywaniu usług, wdrażaniu wielu usług, środowiskach programistycznych, ciągłej integracji / wdrażaniu i wszystkich innych małych radościach wynikających z zarządzania architektura mikrousług.
  3. Użyj formalnego systemu zarządzania pakietami, takiego jak pip dla Pythona, npm dla Node.js, Maven dla Java itp. Wdróż potrzebne fragmenty kodu w repozytorium i wykorzystaj je w razie potrzeby w głównym repozytorium, co powinno dać ci możliwość je zaktualizować. W zależności od sprzężenia między modułami a głównym repozytorium, może nie być w stanie samodzielnie wyodrębnić, uruchomić lub przetestować modułów niższego poziomu. Jeśli możliwe , jednak jest to całkiem dobra droga, że żele oraz z wielu repozytoriów, a jednocześnie jest w stanie zintegrować swoich pakietów w czasie kompilacji, instalując je ze zdalnego repozytorium.

Niestety, żadna z tych opcji nie jest idealna, ale wszystkie są ważne w zależności od stanu bazy kodu. Twój opis brzmi, jakby opcja 3 mogła tutaj najlepiej działać.

Way Spurr-Chen
źródło