Sfondo
Sto lavorando in un team che sta cercando di implementare distribuzioni zero-downtime. Stiamo pianificando di utilizzare una strategia di distribuzione blu / verde per raggiungere questo obiettivo. Una delle cose che mi sto rendendo conto nel fare la ricerca è quanto sia complicato fare cambiamenti al database. Una semplice operazione come la ridenominazione di una colonna può richiedere 3 cicli di rilascio completi fino al completamento!
Mi sembra che avere l'implementazione completa di una modifica richieda più cicli di rilascio per introdurre un grande potenziale di errore umano. Nell'articolo collegato mostra che le modifiche al codice sono necessarie per 2 rilasci e una migrazione del database è necessaria per 3 versioni.
Cosa sto cercando
Attualmente, se vogliamo ricordare di fare qualcosa, possiamo creare un ticket nel nostro sistema di gestione dei problemi, che crea confusione e potrebbe anche essere spostato in uno sprint successivo o in un backlog da parte della direzione; oppure possiamo creare un commento TODO, che sarà probabilmente dimenticato completamente.
Quello che sto cercando è un modo in cui un commento TODO può avere una scadenza contro di esso, e il nostro sistema di Continuous Integration (corrente indecisa che useremo) rigetterebbe la build se questa scadenza fosse scaduta.
Ad esempio, se rinominiamo una colonna, potremmo creare la migrazione iniziale per essa e quindi due commenti TODO per garantire che vengano create le due migrazioni rimanenti:
// TODO by v55: Create migration to move constraints to new column, remove references to old column in app
// TODO by v56: Create migration to drop old column
Questo sembra abbastanza semplice da implementare, ma mi chiedo se qualcosa del genere esiste già, perché non voglio re-inventare la ruota.
Altre riflessioni
Mi sembra che potrei soffrire di problemi XY qui, dato che le implementazioni a rotazione e le distribuzioni blu / verdi sono considerate una best practice, mi sembra strano che non riesca a trovare una soluzione per rendere meno doloroso gli aggiornamenti del database. Se pensi che sto guardando completamente alla cosa sbagliata, per favore fammelo sapere in un commento! Detto questo, l'esempio di database che ho dato è solo un esempio, e penso che i commenti di TODO con le date dovute siano utili anche in altre situazioni, quindi anche se mi sto avvicinando a questa specifica situazione tutto sbagliato mi piacerebbe davvero rispondere alle mie domanda reale anche. Grazie!
EDIT: ho appena pensato ad un'altra situazione in cui ciò potrebbe essere utile. Se utilizzi i cavicchi funzione per attivare parti della tua app quando sono pronte, devi fare attenzione a pulirle, altrimenti potresti finire con Attiva / disattiva . I commenti con le scadenze potrebbero essere un buon modo per ricordarlo.