agsandrew - Fotolia
DevOps efectivo se basa en automatizar un sistema de entrega continua
Muchas organizaciones luchan con juntar el desarrollo y las operaciones, solo para darse cuenta de que un DevOps efectivo significa automatizar con éxito un sistema de entrega continua.
Una organización tiene que estar totalmente comprometida con una estrategia de pruebas automatizadas si desea realizar una entrega continua correctamente. Pero los adoptantes de DevOps necesitan estar prevenidos, porque no es un proceso que deba ser realizado por los débiles de corazón.
Un sistema de entrega continua totalmente automatizado toma código recientemente compilado y lo mueve directamente a producción, siempre y cuando pase cada prueba a lo largo del camino. No hay supervisión humana activa en el proceso, y ningún miembro senior del personal de TI mueve archivos de un servidor de preproducción a producción. No hay mensajes de correo electrónico que enviar, no hay botones que presionar y no hay formularios para firmar. El sistema de entrega continua automatizado se encarga de todo eso, y cada tarea –desde la compilación de código, hasta el rebote del servidor de aplicaciones– está automatizada.
Para muchas organizaciones, el abismo entre la automatización total y la necesidad de la interacción humana es demasiado amplio para que puedan tomar el salto de fe requerido para comprometerse en una verdadera entrega continua. En los departamentos de TI tradicionales, mover el código a producción es un proceso estricto que se programa de antemano y requiere un cierto grado de coordinación de recursos humanos. Las notificaciones de correo electrónico suelen enviarse; el facilitador (scrum master) y el equipo de aseguramiento de calidad necesitan firmas de aprobación; y cuando el código se traslada a producción, todas las partes interesadas en los equipos de desarrollo y operación duermen con el timbre de su teléfono configurado a volumen completo. El equipo de software rara vez duerme profundamente cuando hay una promoción nocturna de código que pasa por producción.
Entonces, ¿cómo se mueve una organización de una mentalidad tradicional de controles y balances manuales a una que confía inequívocamente en un sistema totalmente automatizado?
"Se trata de las pruebas: pruebas de unidad, pruebas de aceptación, pruebas de desempeño y todo este tipo de cosas", dijo Eberhard Wolff, consultor de software en innoQ, con sede en Alemania. El sistema de entrega continua es un proceso automatizado que mueve el código a través de las etapas de desarrollo de software, desde el inicio hasta la producción. Para manejar ese proceso con confianza, el código debe ser probado de todas las maneras imaginables, y la cobertura de las pruebas debe cubrir todos los aspectos de la aplicación.
Pero si las pruebas son la bala mágica, la automatización es la pólvora, y el servidor de integración es el disparador que dispara el sistema de entrega continua. Pero, para asegurarse de que todo funciona sin problemas –sin interrupciones en el sistema de entrega continua– el elemento humano es completamente eliminado. "Solo tener [servidor de automatización] Jenkins y solo tener un sistema de despliegue no es el desafío clave", advirtió Wolff. "El desafío clave es entrar en producción sin firmar aprobaciones".
Resistencia al sistema de entrega continua
Eliminar el factor humano puede ser un desafío por una variedad de razones. Existe un temor comprensible de que se pierda el control sobre los sistemas de producción, haciendo a las partes interesadas reticentes a aceptar plenamente la entrega continua.
Otro aspecto menos técnico en la reticencia a adoptar la entrega continua es que algunos participantes en el proceso de implementación equiparan su tarea manual con un sentido de estatus. Tener el poder de decidir si una aplicación cumple con los estándares de calidad puede ser intoxicante. Una persona con la autoridad para enviar un correo electrónico a todo el equipo regañándolos por una liberación de software insuficiente viene con tener una posición políticamente poderosa. Siempre habrá personas que tienen motivos ocultos para no querer que un sistema de entrega continua sea implementado, y las organizaciones que buscan adoptar los tipos de prácticas DevOps deben ser conscientes de ello.
Cuando está totalmente automatizada, el sistema de entrega continua en sí es de naturaleza muy igualitaria. Su propósito es ejecutar un conjunto de pasos automatizados, que con éxito moverán una nueva versión de código a producción. El sistema tiene muy poca preocupación de si el equipo de desarrollo o el equipo de operaciones está satisfaciendo sus necesidades automatizadas, y no juega a la política o a los juegos de poder; un beneficio a menudo pasado por alto de usar ese método.
DevOps y entrega continua
Algunos de los pasos que lleva a cabo el sistema de integración continua, como la compilación de código, pertenecen estrictamente al dominio del desarrollador de software. Otros pasos –como la prueba de carga de la promoción del código en producción– tradicionalmente han caído en el ámbito del personal de operaciones. Pero el sistema de integración continua no tiene necesidad de las funciones de "desarrollador" u "operaciones"; todo lo que se requiere es que los recursos estén disponibles cuando sea necesario.
Fue esencialmente por esta necesidad no discriminatoria que nació DevOps. Después de todo, DevOps en su forma más verdadera, es simplemente el camino hacia la automatización de tareas de desarrollo de software que permiten que el código pase desde su creación hasta el despliegue, con la menor cantidad de fricción. Una organización que tiene éxito en implementar un sistema de entrega continua está, por definición, trabajando con un enfoque basado en DevOps.
Pero, para hacer la entrega continua correctamente, la clave es eliminar todos los procesos manuales e implementar un sistema que esté totalmente automatizado y sea capaz de empujar el código a los servidores de producción sin intervención humana. No es necesariamente un objetivo fácil de lograr, pero hay innumerables beneficios por adoptar este enfoque basado en DevOps que continuamente entrega código hacia la producción.