sfondo
Sto lavorando in un team che sta cercando di implementare distribuzioni a zero-downtime. Stiamo programmando di utilizzare una strategia di distribuzione blu / verde per raggiungere questo obiettivo. Una delle cose che sto realizzando nel fare la ricerca è quanto sia complicato apportare modifiche al database. Una semplice operazione come rinominare una colonna può richiedere 3 cicli di rilascio completi fino al completamento!
Mi sembra che avere il pieno lancio di una modifica richieda più cicli di rilascio introduce un grande potenziale di errore umano. Nell'articolo collegato mostra che sono necessarie modifiche al codice per 2 versioni e una migrazione al database per 3 versioni.
Quello che sto cercando
Attualmente, se vogliamo ricordare di fare qualcosa, possiamo creare un ticket nel nostro sistema di gestione dei problemi, che crea disordine e potrebbe anche essere spostato in uno sprint successivo o nel backlog dalla direzione; oppure possiamo creare un commento TODO, che probabilmente sarà completamente dimenticato.
Quello che sto cercando è un modo in cui un commento TODO può avere una scadenza contro di esso, e il nostro sistema di integrazione continua (attualmente indeciso che useremo) rifiuterebbe la build se questa scadenza fosse scaduta.
Ad esempio, se rinominiamo una colonna, potremmo creare la migrazione iniziale per essa, quindi due commenti TODO per garantire che vengano create le restanti due migrazioni:
// 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
Sembra abbastanza semplice da implementare, ma mi chiedo se esiste già qualcosa del genere, perché non voglio reinventare la ruota.
Pensieri aggiuntivi
Mi sento come se potessi soffrire di problemi XY qui, dato che le distribuzioni in rotazione e le distribuzioni blu / verde sono considerate una buona pratica, sembra strano che non riesca a trovare una soluzione per rendere gli aggiornamenti del database meno dolorosi. Se pensi che sto esaminando completamente la cosa sbagliata, per favore fammi sapere in un commento! Detto questo, l'esempio di database che ho fornito è solo un esempio e penso che i commenti TODO con scadenze sarebbero utili anche in altre situazioni, quindi anche se mi sto avvicinando a questa situazione specifica, mi piacerebbe davvero rispondere alle mie domanda reale anche. Grazie!
EDIT: ho appena pensato a un'altra situazione in cui questo potrebbe essere utile. Se usi Toggle Feature per attivare parti dell'app quando sono pronte, devi fare attenzione a ripulirle, altrimenti potresti finire con Toggle Debt . I commenti con scadenze potrebbero essere un buon modo per ricordare questo.
TODO <Bug#>:
per tracciare soluzioni alternative per problemi con altri componenti. Quando un bug viene eliminato su uno di questi componenti, è possibile trovare e risolvere facilmente le soluzioni alternative pertinenti. Non sostituisce un tracker di problemi, ne semplifica la manutenzione.