Hay muchas cosas que podría estar haciendo para mejorar su proceso de implementación. Algunos de ellos son:
Asegúrese de que su código esté bien probado.
Idealmente, debe tener una cobertura de prueba de unidad del 100%, así como pruebas de integración para cada escenario concebible.
Si no tienes esto, probablemente deberías dejarlo todo y solucionarlo.
Examina el desarrollo basado en el comportamiento.
Tener un conjunto de pruebas completo le permitirá ...
Ejecute la integración continua.
Cada vez que alguien comete un cambio, CI puede ejecutar automáticamente el conjunto de pruebas en él. Si se aprueba el conjunto de pruebas, se puede implementar de inmediato (o programar una implementación). Para los cambios que no requieren ningún cambio significativo en sus bases de datos, esto solo le ahorrará mucho tiempo y dolor de cabeza.
En caso de un problema, CI también puede darle una reversión de un clic.
CI es mucho menos útil si su conjunto de pruebas no está completo y es correcto, ya que toda la premisa se basa en poder validar su código de manera automatizada.
Haz actualizaciones atómicas.
Idealmente, no debería simplemente copiar nuevos archivos sobre los antiguos en el servidor de producción. En su lugar, use una herramienta como capistrano, que copia cada archivo a una nueva ubicación, y luego usa un enlace simbólico para señalar la implementación deseada. Retroceder es instantáneo, ya que implica simplemente cambiar el enlace simbólico para que apunte a la implementación anterior. (Aunque esto no necesariamente cubre la migración de su base de datos).
También revise si los contenedores como Docker pueden ayudarlo.
Haga cambios más pequeños y más frecuentes.
Ya sea que tenga pruebas, CI o nada, esto solo puede ayudarlo significativamente. Cada cambio debe tener su propia rama git, y una implementación debe tener la menor cantidad de cambios posible. Debido a que los cambios son más pequeños, hay menos que pueda salir mal durante una implementación.
En esa nota, haga los cambios más aislados siempre que sea posible. Si ha realizado un cambio en el juego de Omaha, y no afecta a Texas Hold'em, 5 card stud o cualquier otra cosa, entonces ese es el único juego que debe suspenderse por mantenimiento.
Analiza cualquier cosa de larga duración.
Usted mencionó que algunas partes de sus implementaciones llevan mucho tiempo. Esta es , probablemente, los cambios de esquema de base de datos. Vale la pena echar un vistazo al DBA en su base de datos, junto con cada cambio de esquema, para ver qué puede estar funcionando mejor.
Haga que un experto en la materia analice cualquier otra parte de una implementación que requiera grandes bloques de tiempo.
Trabaja horas impares.
Puede que ya estés haciendo esto, pero vale la pena mencionarlo. No debería esperarse que los desarrolladores (¡y los administradores de sistemas!) Trabajen más de "9 a 5", especialmente para una operación 24x7. Si se espera que alguien pase las horas de la noche cuidando un despliegue, arreglando cualquier problema y luego mantenga un horario diurno, sus expectativas no son realistas y está preparando a esa persona para el agotamiento.