Flusso di lavoro per catene di richieste di pull dipendenti a progetti che dipendono da altri progetti

2

Supponiamo di avere il progetto A e il progetto B, dove il progetto B dipende dal progetto A - diciamo che A è una libreria. E il progetto A e il progetto B vivono in repository di controllo di versioni separate, perché il progetto A è stato creato da una terza parte o perché hai deciso di organizzare i repository in quel modo. Vuoi apportare alcune modifiche al progetto B, ma per fare ciò devi apportare alcune modifiche al progetto A. Quindi fai due richieste pull, una per le modifiche al progetto B e una per le modifiche al progetto A - queste I PR devono "essere applicati insieme - sebbene nella pratica , ovviamente, uno di questi deve essere prima unito (logicamente, deve essere il PR per il progetto A) ed ecco dove il problema può entra.

Abbiamo impostato il nostro server CI (TeamCity) per creare tutte le filiali di funzionalità, in modo da poter vedere facilmente se una PR individuale o autonoma per la proiezione B interrompe le cose nel progetto B. Ma perché il codice nei rami di funzionalità non viene pubblicato al nostro repository di artefatti (Nexus) fino a quando non viene unito al master, questo non funziona molto bene per coppie (o anche catene) di PR come lo scenario descritto sopra. Possiamo solo vedere, in modo valido, se il PR per il progetto B verrà costruito sul server di build dopo che abbiamo già unito il PR per il progetto A. E recentemente è successo che questa build dipendente non è riuscita ... a causa di un problema che si è verificato solo sul build server.

Quindi, ci siamo ritrovati in una situazione in cui il master del progetto B non stava crescendo a causa di una coppia di PR strettamente vincolata solo a metà fusione: il PR per il progetto A era stato unito, ma il PR per il progetto B non aveva 'stato ancora, a causa del problema inaspettato sul server di build.

Come potremmo modificare il nostro flusso di lavoro per evitare questo tipo di problema in futuro?

    
posta Robin Green 26.10.2015 - 12:40
fonte

2 risposte

1

Nella situazione descritta, se vuoi assicurarti che la build CI non si rompa, potresti dover dividere le modifiche in blocchi ancora più piccoli o leggermente diversi.

Un flusso di lavoro riuscito potrebbe essere:

  1. Modifica il progetto A in modo tale che la nuova funzionalità possa essere supportata, ma l'API esistente rimane valida (almeno per il momento).
  2. Attendi fino a quando la nuova versione di A è disponibile nel repository artefact.
  3. Apporta le modifiche richieste al progetto B, utilizzando le interfacce appena introdotte dal progetto A.
  4. (Facoltativo) Rimuovi dal progetto A le interfacce che sono diventate obsolete e non vengono più utilizzate.

La principale differenza con il tuo flusso di lavoro esistente è che non cambia entrambi i progetti contemporaneamente. Innanzitutto apportate le modifiche richieste, in un modo compatibile con le versioni precedenti, ai progetti inferiori nel grafico delle dipendenze e solo quando avete una versione "rilasciata" delle vostre dipendenze che supportano ciò che vi serve, solo allora fate l'aggiornamento al livelli più alti.

    
risposta data 26.10.2015 - 13:16
fonte
0

Un'altra opzione è quella di legare insieme (o qualsiasi numero di) progetti, fianco a fianco, per essere gestiti in modo monolitico:

  • non ti preoccupare più delle dipendenze del changeset, è supportata qualsiasi combinazione di changeset singoli o multi-repo, sono proprio come un normale changeset in un singolo repository
  • CI funziona sempre su tutti questi repository collegati
  • non c'è più attesa tra team che lavorano su progetti diversi, tutti sono sulla stessa pagina

In effetti, hai a che fare solo con un progetto singolo , non con più inter-dipendenti.

Vedi anche questa risposta su come ottenere questo risultato dal punto di vista del controllo della versione: link

    
risposta data 02.12.2015 - 06:37
fonte

Leggi altre domande sui tag