Come molte (la maggior parte?) persone, abbiamo più librerie "comuni" che gestiscono varie cose (oggetti di business, utilità, librerie esterne ...) per più progetti (servizio web, sito di amministratori / utenti, app desktop ... ).
Come è stato impostato oggi, ogni progetto copia i suoi file binari in una cartella "assiemi" di un livello superiore al progetto, e fanno tutti riferimento ai binari in questa cartella, piuttosto che al progetto stesso.
Anche le cartelle SVN sono un disastro, con librerie comuni in soluzioni di progetti specifici e servizi a volte raggruppati, a volte all'interno della propria cartella.
Oggi esiste un insieme incredibilmente complicato di lavori Jenkins che copiano e utilizzano vari output di progetti ovunque, con dipendenze molto difficili da tracciare e spesso infranti: ad esempio, quando eseguo il commit con l'interfaccia utente di amministrazione, si costruisce rapidamente, ma fallisce perché il servizio web non ha terminato la costruzione.
Vedo molti problemi con questa organizzazione; tra gli altri:
- Devo rispettare un albero di cartelle specifico per poter costruire un progetto, non posso solo controllare un singolo progetto e lavorarci sopra.
- Per costruire il progetto A, devo costruire il progetto B, e prima del progetto C, e così via e così via. Posso spendere un sacco di tempo per scoprire quale progetto mi manca per costruire il primo.
- La configurazione intera build è memorizzato in Jenkins, e gli sviluppatori non hanno un accesso diretto ad esso. Quindi non posso semplicemente controllare un progetto che non ho mai toccato prima e costruire l'intero albero delle dipendenze eseguendo uno script
Sono abituato a scrivere script di grandi dimensioni che fanno tutto, quindi mi sta facendo impazzire, ma altri sviluppatori ci sono abituati e si limitano a scrollare le spalle.
In che modo tu puoi configurare il tuo sistema di generazione per gestire le tue librerie comuni ed esterne?
( Aggiornamento : stiamo usando .Net, perché a quanto pare ci sono diverse soluzioni per lingue diverse)
Informazioni sui gestori delle dipendenze: nuget, npm, ecc.
Abbiamo pensato di utilizzare un server Nuget interno per archiviare DLL con versioni e usarlo per fare riferimento ad altri progetti.
Il problema con questo approccio è l'impatto sul flusso di lavoro giornaliero.
Diciamo che immagazzino i miei binari in un repository nuget. E per creare una nuova funzione, devo modificare i progetti A, B e C. Il mio flusso di lavoro diventa molto attesa:
- Modifico e impegno il progetto A.
- Aspetto che la compilazione A termini e che il feed nuget aggiorni
- Aggiorna il mio pacchetto nuget su B, modifica, commit.
- Aspetto che finisca la compilazione di B e che il feed di nuget aggiorni
- Aggiorna il mio pacchetto nuget su C, modifica, commit.
- Per la mia prossima funzione, devo tornare al passaggio 1.
- Oppure codifico più funzioni contemporaneamente e non è molto agile (e molto rischioso).
Questa organizzazione interrompe completamente il flusso di codice e, in quanto tale, è inaccettabile.
Forse non sto pensando all'organizzazione corretta che utilizza un manager delle dipendenze? Forse c'è un modo migliore?