In parole povere, il prodotto della mia azienda è una webapp con un backend di database. Abbiamo un ambiente scenico e un ambiente di produzione per ciascuno dei circa 100 clienti. Esiste un database separato per ogni ambiente. I contenuti del database provengono da un numero di file CSV creati e gestiti dal nostro team di dati (non tecnici). I dati sono specifici del cliente e devono essere aggiornati anche quando dev aggiunge nuove funzionalità al prodotto. Tuttavia, non tutti i client utilizzano la stessa versione del prodotto, quindi non solo i contenuti, ma anche la struttura dei CSV varia a seconda del cliente.
Attualmente, i file CSV sono versionati in SVN. Tuttavia, non esiste alcuna separazione tra i dati testati e non testati. Il mio team è responsabile del caricamento di nuovi dati negli ambienti dei clienti, ma siamo già stati masterizzati prima caricando i dati non testati in un ambiente di produzione. La risposta chiara a questo è imitare una configurazione di sviluppo e creare un tronco, rami e tag, dove il tronco è sempre stabile (dati testati), i rami contengono modifiche sperimentali / non testate e i tag vengono creati ogni volta che vengono caricati nuovi dati ambiente.
La mia domanda riguarda la dipendenza tra dati e codice ... quando dev rilascia una versione che include nuove funzionalità, i dati devono essere aggiornati per adattarsi a tali caratteristiche prima di poter aggiornare il codice su un ambiente. Come possiamo tracciare se i dati per un particolare client sono compatibili con una particolare versione di codice?
Il mio primo istinto è creare un ramo nel repository dati ogni volta che viene pianificato un aggiornamento del codice per un determinato cliente. Il nome del ramo corrisponderebbe al numero di versione. Tuttavia, poiché la versione in codice delle nostre caselle di produzione in genere è notevolmente inferiore rispetto a quella dei nostri ambienti di stage, il team di dati dovrebbe lavorare simultaneamente in due rami, assicurando che le nuove funzionalità per il codice più recente e più grande passino solo nel ramo più recente, ma le correzioni continuano anche nel ramo più vecchio. Ovviamente, una volta che il codice sul palco e la produzione divergono, non possiamo essere sicuri al 100% che le correzioni dei dati che testeremo sul palcoscenico funzioneranno sul vecchio codice installato in produzione. Qualcuno ha qualche idea su come possiamo gestire meglio questo processo?