Antecedentes
Estoy trabajando en un equipo que busca implementar implementaciones de tiempo de inactividad cero. Estamos planeando usar una estrategia de implementación azul / verde para lograr esto. Una de las cosas de las que me estoy dando cuenta al investigar es lo complicado que resulta hacer cambios en la base de datos. ¡Una operación simple como cambiar el nombre de una columna puede tomar 3 ciclos completos de liberación hasta que se complete!
Me parece que tener el despliegue completo de un cambio tomar múltiples ciclos de lanzamiento introduce un gran potencial para el error humano. En el artículo vinculado, muestra que los cambios de código son necesarios para 2 versiones y una migración de base de datos para 3 versiones.
Lo que estoy buscando
Actualmente, si queremos recordar hacer algo, podemos crear un ticket en nuestro sistema de administración de problemas, lo que crea desorden y también puede ser trasladado a un sprint posterior o al retraso de la administración; o podemos crear un comentario TODO, que probablemente se olvidará por completo.
Lo que estoy buscando es una forma en que un comentario TODO pueda tener una fecha límite en su contra, y nuestro sistema de Integración Continua (actual indeciso que usaremos) rechazaría la compilación si esta fecha límite expirara.
Por ejemplo, si cambiamos el nombre de una columna, podríamos crear la migración inicial para ella, y luego dos comentarios TODO para garantizar que se creen las dos migraciones restantes:
// 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
Esto parece bastante simple de implementar, pero me pregunto si ya existe algo como esto, porque no quiero reinventar la rueda.
Pensamientos adicionales
Siento que podría estar sufriendo un problema XY aquí, dado que las implementaciones continuas y las implementaciones azul / verde se consideran una práctica recomendada, parece extraño que no pueda encontrar una solución para hacer que las actualizaciones de la base de datos sean menos dolorosas. Si crees que estoy investigando algo completamente incorrecto, ¡házmelo saber en un comentario! Dicho esto, el ejemplo de la base de datos que di es solo un ejemplo, y creo que los comentarios TODO con fechas de vencimiento también serían útiles en otras situaciones, por lo que incluso si me estoy acercando a esta situación específica completamente equivocada, realmente me gustaría responder a mi pregunta real también. ¡Gracias!
EDITAR: Acabo de pensar en otra situación en la que esto podría ser útil. Si usa las funciones de alternancia para activar partes de su aplicación cuando estén listas, debe tener cuidado de limpiarlas, de lo contrario, podría terminar con la deuda de alternancia . Los comentarios con fechas límite podrían ser una buena forma de recordar esto.
TODO <Bug#>:
para rastrear soluciones a problemas con otros componentes. Cuando se elimina un error en uno de esos componentes, puede encontrar y abordar fácilmente las soluciones alternativas. No reemplaza un rastreador de problemas, lo hace más fácil de mantener.