monorepo - Monorepo singolo per più progetti su larga scala di dimensioni aziendali

5

Ho bisogno di un consiglio prima di andare avanti.

Voglio costruire diversi progetti su larga scala, come un prodotto di mercato e alcuni prodotti e librerie specifici per dominio. I prodotti possono o non possono essere correlati ma possono condividere le librerie. Ogni prodotto può benissimo essere la propria società [ad es. il mercato]).

Sono per usare monorepos. Ci sono tanti vantaggi quanti sono gli svantaggi. I punti Pro-monorepo sono discussi in Vantaggi del controllo di versione monolitico su danluu .com e nei collegamenti associati all'articolo.

Perché penso di aver bisogno di un monorepo - Ho letto dei pro di monorepo, ma sono principalmente focalizzato sul seguente:

  • Condivisione di codice closed-source. I prodotti e i progetti condivideranno le librerie interne (a codice chiuso). La condivisione del codice diventa più semplice perché le dipendenze closed-source sono disponibili localmente. Gli archivi basati su progetti richiedono strumenti adeguati per la costruzione. Sto cercando di evitare questo requisito poiché non sono in grado di trovare strumenti per la gestione delle dipendenze closed-source utilizzando più repository.

Perché monorepos sarà un problema

  • Incapacità di scala.
  • Impossibilità di ripristinare le modifiche senza grossi problemi.
  • Impossibilità di nascondere il codice sensibile. Poiché prodotti e progetti condividono un singolo repository, verrà esposto il codice di un prodotto.

Domande

  • Qual è la migliore pratica per la gestione di numerosi progetti su vasta scala a codice chiuso in un monorepo?
  • Sarebbe saggio (e ragionevole) avere questi progetti su larga scala nello stesso repository?

Grazie ragazzi

    
posta eurekasfray 17.09.2017 - 00:22
fonte

2 risposte

2

Per gestire la complessità su larga scala, il principio di vincita da Julius Caesar è " Divide et impera ", in inglese dividi e regoli (o dividi e vinci). Questo principio si applica agli imperi politici e agli imperi del software.

Gli ingegneri del software non intendono conquistare imperi, quindi lo chiamano in modo diverso. Le principali varianti di questo principio sono separazione delle preoccupazioni , componentisation e incapsulamento (nel senso di nascondere le informazioni, cioè nascondere le parti interne di un componente). Tutti questi principi si basano sul fatto che è più facile costruire parti indipendenti liberamente accoppiate e, quando necessario, assemblare le scatole nere per ottenere un valore più alto senza perdersi nei dettagli e nelle interazioni e dipendenze impreviste.

L'adozione di diversi repository indipendenti consente di potenziare i diversi team partecipanti per utilizzare le procedure più adatte alle proprie esigenze, gestire diverse pianificazioni di rilascio e - perché no - open source, vendere o subappaltare i diversi componenti per sfruttare l'efficienza (es. open source una libreria più generale, ma continua a mantenere il controllo sugli altri tuoi prodotti più specifici).

Tutto questo (e in aggiunta le molte altre sfide relative al monolite) spiega sicuramente perché monorepos sono oggi più l'eccezione che la regola. Ti consiglio vivamente di riconsiderare la tua scelta.

    
risposta data 17.09.2017 - 15:22
fonte
0

Concentrati un po 'su ciò che hai elencato come problemi.

Inability to scale

Un monorepo non è un singolo repository, è una raccolta di repository (quanti ne vuoi, potenzialmente anche utilizzando diversi sistemi di controllo di versione) gestiti insieme in modo monolitico in modo che appaia come un unico repository. La scalabilità dai sistemi di controllo della versione non è un problema.

Dato che stai ancora considerando di utilizzare un singolo repository, suppongo che tu non sia uno dei pochi casi in cui l'estrazione di un'area di lavoro con l'intera base di codici sarebbe problematica a causa delle dimensioni. Tali casi richiederebbero metodi innovativi di costruzione dei prodotti.

Alcuni monorepos hanno il supporto per operazioni sparse - uno spazio di lavoro conterrebbe solo un sottoinsieme dei repository di base di codice. Vedi anche Expansion Contracting Monorepos .

Inability to rollback changes without major problems.

Questo non è affatto un problema a causa della gestione monolitica: è sufficiente eseguire il rollback della versione monorepo, che dovrebbe ripristinare coerentemente ciascuno dei repository coinvolti nelle versioni corrette.

Inability to hide sensitive code. Because products and projects share a single repo, code from one product will be exposed.

Ancora una volta, non un singolo repository.

E ora le domande.

What's the best practice for managing several closed-source large-scale projects in a monorepo?

Donno su migliore , persone diverse hanno opinioni diverse :) Parlo da una vasta esperienza con un monorepo (personalizzato) con oltre un migliaio di repository, al servizio di molti team e prodotti embedded (condividendo grandi quantità di codice):

  • scoraggiare lo sviluppo indipendente nei singoli repository dal monorepo, tutto dovrebbe passare costantemente attraverso il monorepo, con un buon sistema CI / CD in funzione a livello di monorepo
  • meglio servito IMHO con Sviluppo basato su tronco

Would it be wise (and sane) to have these large-scale projects in the same repo?

Probabilmente lo stesso repository non lo è. In un monorepo, IMHO sì - conosci già i vantaggi.

    
risposta data 22.09.2017 - 07:04
fonte

Leggi altre domande sui tag