Compartilhando partes de um monorepo

12

Atualmente, temos um sistema de compilação complexo e ineficiente que consiste em muitos repositórios SVN e Git (cerca de 50% cada), incluindo um que é um repositório de sub-módulos git. Também temos scripts caseiros que gerenciam mais ou menos bem a coisa toda.
Um ponto importante da nossa base de código (de código fechado) é que ela é fortemente acoplada e que todo projeto é lançado ao mesmo tempo na mesma versão.

Queremos migrar isso para um sistema mais simples e um único VCS, e estamos considerando várias opções, incluindo: submódulos git, google Repo e monorepos. O VCS final ainda não está definido (exceto para as opções que o determinam) e pode ser svn, git ou até outra coisa, se isso se encaixar melhor em nossa situação.

Estamos tentando listar os pontos positivos e negativos de cada solução e um dos principais problemas que temos atualmente com os monorepos é que não parece fácil ou até possível compartilhar apenas alguns módulos com uma entidade externa. Queremos que essas pessoas possam fazer check-out e trabalhar normalmente nesses módulos, mas não possam acessar o código ou o histórico do restante do repo. Não é algo que fazemos com frequência ou extensivamente no momento, mas podemos no futuro, e não queremos que isso se torne um pesadelo, porque tomamos uma decisão ruim aqui.

Existe um sistema de gerenciamento de privilégios em um sistema VCS?
Ou existe alguma maneira de mitigar esse problema?

Leherenn
fonte
Você consideraria o Team Foundation Server ou Serviço? Tem suporte para Git e inclui alguns fluxo de trabalho agradável e capacidades de integração contínua
hanzolo
Qual é exatamente a implementação do monorepo que você está considerando?
Dan Cornilescu

Respostas:

3

Na sua descrição, acho que você tem algumas opções aqui:

  1. Use submodules git - com um serviço como o GitHub (ou qualquer outra coisa), você pode gerenciar permissões por projeto e desacoplar seu processo de implantação. No entanto, ouvi dizer que os submódulos git acabam sendo uma grande dor ao longo do tempo. Scripts automatizados para reinicializar / fazer o download limpo de seus sub-módulos git podem ajudar aqui.
  2. Divida seu repo em serviços independentes. Isso permite que você desenvolva simultaneamente, mas também apresenta uma grande quantidade de dor, pois você precisa começar a pensar em descoberta de serviços, implantação de vários serviços, ambientes de desenvolvimento, integração / implantação contínua e todas as outras pequenas alegrias resultantes do gerenciamento de um arquitetura de microsserviço.
  3. Use um sistema formal de gerenciamento de pacotes, como o pip para Python, o npm para o Node.js, o Maven para Java etc. para versão deles. Dependendo do acoplamento entre seus módulos e seu repositório principal, talvez você não consiga extrair, executar ou testar os módulos de nível inferior independentemente. Se você puder , no entanto, este é um bom caminho para se adaptar a vários repositórios, enquanto ainda é possível integrar seus pacotes no momento da construção, instalando-os a partir de um repositório remoto.

Infelizmente, nenhuma dessas opções é perfeita, mas todas são válidas dependendo do estado da sua base de código. Sua descrição parece que a opção 3 pode funcionar melhor aqui.

Caminho Spurr-Chen
fonte