Partage de parties d'un monorepo

12

Nous avons actuellement un système de construction complexe et inefficace composé de nombreux dépôts SVN et Git (environ 50% chacun), dont un qui est un dépôt de sous-modules git. Nous avons également des scripts maison qui gèrent plus ou moins bien le tout.
Un point majeur de notre base de code (source fermée) est qu'elle est étroitement couplée et que chaque projet est publié en même temps sous la même version.

Nous voulons migrer cela vers un système plus simple et un seul VCS, et envisage plusieurs options, notamment: les sous-modules git, google Repo et monorepos. Le VCS final n'est pas encore défini (sauf pour les options qui le rendent obligatoire), et pourrait être svn, git ou même autre chose si cela correspondait mieux à notre situation.

Nous essayons de répertorier les avantages et les inconvénients de chaque solution et l'un des principaux problèmes que nous rencontrons actuellement avec les monorepos est qu'il ne semble pas facile, ni même possible de partager uniquement certains modules avec une entité externe. Nous voulons que ces personnes puissent passer à la caisse et travailler normalement sur ces modules, mais pas pouvoir accéder au code ou à l'historique du reste du dépôt. Ce n'est pas quelque chose que nous faisons souvent ou largement pour le moment, mais nous pourrions le faire à l'avenir, et nous ne voulons pas que cela devienne un cauchemar parce que nous avons pris une mauvaise décision ici.

Un tel système de gestion des privilèges existe-t-il dans un système VCS?
Ou existe-t-il un moyen d'atténuer ce problème?

Leherenn
la source
Envisageriez-vous Team Foundation Server ou Service? Il prend en charge Git et comprend un flux de travail agréable et des capacités d'intégration continue
hanzolo
Quelle est exactement l'implémentation monorepo que vous envisagez?
Dan Cornilescu

Réponses:

3

D'après votre description, je pense que vous avez quelques options ici:

  1. Utilisez des sous-modules git - avec un service comme GitHub (ou autre), vous pouvez gérer les autorisations par projet et découpler votre processus de déploiement. Cependant, j'ai entendu dire que les sous-modules git finissent par être une énorme douleur au fil du temps. Des scripts automatisés pour réinitialiser / télécharger proprement vos sous-modules git pourraient vous aider ici.
  2. Divisez votre repo en services indépendants. Cela vous permet de développer simultanément, mais introduit également une grande quantité de douleur lorsque vous devez commencer à penser à la découverte de services, au déploiement de plusieurs services, aux environnements de développement, à l'intégration / déploiement continu et à toutes les autres petites joies qui découlent de la gestion d'un architecture de microservices.
  3. Utilisez un système de gestion de package formel tel que pip pour Python, npm pour Node.js, Maven pour Java, etc. Déployez les morceaux de code dont vous avez besoin dans le référentiel et consommez-les dans votre référentiel principal si nécessaire, ce qui devrait vous donner la capacité pour les versionner. Selon le couplage entre vos modules et votre référentiel principal, vous ne pourrez peut-être pas réellement extraire, exécuter ou tester les modules de niveau inférieur de manière indépendante. Si vous le pouvez , cependant, c'est une assez bonne façon de procéder qui se marie bien avec plusieurs référentiels tout en étant capable d'intégrer vos packages au moment de la construction en les installant à partir d'un référentiel distant.

Malheureusement, aucune de ces options n'est parfaite, mais elles sont toutes valides selon l'état de votre base de code. Votre description semble que l'option 3 pourrait mieux fonctionner ici.

Chemin Spurr-Chen
la source