Comprender la entrega continua

La entrega continua (o CD, por sus siglas en inglés) es la automatización de los pasos manuales que intervienen en la preparación del software para su lanzamiento a producción.

¿Qué es la entrega continua?

La entrega continua se sirve de la integración continua (CI, por sus siglas en inglés) para automatizar las fases manuales que intervienen en la preparación del software para su lanzamiento a producción.

Cada vez que se combinan cambios de código en una rama designada, el proceso de integración continua ejecuta una serie de comprobaciones, como las pruebas de unidad automatizadas, y crea una compilación. La entrega continua amplía ese proceso implementando de forma automática cada compilación en entornos de prueba y almacenamiento provisional y ejecutando más pruebas automatizadas.

Estas pruebas incluyen pruebas de integración, de interfaz de usuario, de rendimiento (por ejemplo, de carga, inmersión o estrés) y de extremo a extremo. En función del sector en el que trabaje, también puede utilizar la entrega continua para ejecutar pruebas de seguridad, de accesibilidad y pruebas manuales de aceptación del usuario o de exploración. Si la compilación ha superado correctamente cada fase, se considera que está lista para pasar a producción.

Al igual que con la integración continua, la clave para una entrega continua eficaz es automatizar la mayor parte posible del proceso. Esto incluye proporcionar comentarios en cada fase y avisar al equipo si la compilación no supera una fase para que pueda abordar el problema rápidamente.

entrega continua

Entrega continua vs. implementación continua

Tanto la entrega continua como la implementación continua implican la implementación automática de compilaciones en entornos y la ejecución de pruebas automatizadas, por lo que, a veces, ambos términos se utilizan indistintamente. Sin embargo, son conceptos que debemos distinguir.

Con la implementación continua, un cambio de código se implementa de forma automática en la fase de producción si se superan con éxito todas las fases de prueba. Por el contrario, la entrega continua incluye un paso manual en la última fase: el lanzamiento a producción del software.

Aunque la implementación continua pueda parecer el objetivo ideal para cualquier equipo de desarrollo de software, son muchos los equipos que optan por la entrega continua.

Más información sobre la comparación entre la implementación y la entrega continuas.

¿Por qué la entrega continua?

La fase final de un proceso de CI/CD consiste en implementar los cambios del código en producción. Con la entrega continua, la decisión de lanzar a producción es un paso manual, aunque el propio proceso de lanzamiento esté automatizado.

Algunos equipos llevan a cabo la entrega continua como paso previo a la implementación continua. Activar manualmente la implementación final a producción ofrece una red de seguridad mientras se genera confianza en las pruebas y las comprobaciones automáticas. En este caso, puede optar por llevar a cabo la entrega continua durante unos meses antes de dar el salto a la implementación automática en producción de cada cambio de código realizado correctamente.

Sin embargo, desplegar actualizaciones en el software varias veces al día o cada hora no siempre es la mejor opción. Para el software versionado (como las aplicaciones móviles, las API, el software integrado o los productos de escritorio) suele tener sentido agrupar los cambios en versiones más grandes. Los usuarios de productos instalados no esperan tener que actualizar sus aplicaciones cada pocas horas, mientras que la actualización a una nueva versión de la API puede afectar de forma significativa a sus clientes. Elegir entre la entrega y la implementación continuas es tomar la decisión correcta para su empresa y sus usuarios.

Creación de un proceso de entrega continua

Aunque las fases, los entornos y las pruebas concretas de la compilación dependerán del producto y la organización, los siguientes principios generales le ayudarán a crear un proceso de entrega continua:

  • Empiece por la integración continua: en la mayoría de los casos, es habitual implementar la integración continua antes que la entrega continua. Dado que la integración continua afecta principalmente al equipo de desarrollo, es una buena oportunidad para acostumbrarse a automatizar el proceso de compilación, prueba e implementación antes de involucrar a terceros.
  • Diseñe su proceso de entrega continua para obtener comentarios rápidamente: descubrir pronto los problemas hace que el proceso de desarrollo sea más eficiente. Algunas fases pueden ejecutarse en paralelo, como las pruebas de interfaz de usuario automatizadas en compilaciones para distintas plataformas. Además, las pruebas de rendimiento más largas o que consumen más recursos pueden retrasarse hasta que la compilación supere correctamente las fases anteriores.
  • Colaborar con terceros: DevOps, la filosofía detrás de la integración y la entrega continuas, anima a los equipos de desarrollo a eliminar las barreras y tener en cuenta el proceso de desarrollo de software completo. Al diseñar su proceso de entrega continua, procure involucrar a todos los que participan en el proceso de lanzamiento actual, desde operaciones y seguridad hasta marketing y asistencia.
  • Automatice las pruebas: las pruebas automatizadas son esenciales para la entrega continua, ya que son una forma fiable y rápida de validar que el software se comporta según lo previsto. Si no dispone de pruebas automatizadas, priorice las áreas de mayor impacto y aumente la cobertura de las pruebas de forma gradual.
  • Reutilice el mismo artefacto de compilación: para evitar introducir incoherencias, despliegue el mismo artefacto de compilación desde la fase de integración continua a cada entorno de preproducción y producción.
  • Actualice los entornos de prueba de forma automática: lo ideal sería que los entornos de prueba se actualizaran para cada nueva compilación en los procesos de integración y entrega continuas. Los contenedores y un enfoque de infraestructura como código facilitan el desmontaje y la puesta en marcha de nuevos entornos según sea necesario.
  • Tenga en cuenta las necesidades de los grupos de interés: la excepción al punto anterior son los entornos de almacenamiento provisional utilizados por los equipos de asistencia, ventas o marketing para familiarizarse con las nuevas funciones. Puede que estos equipos prefieran que los entornos se actualicen bajo demanda para no interrumpir el trabajo en curso.
  • Adopte DevSecOps: el equipo de infosec o de ciberseguridad suele considerarse una barrera frente a los lanzamientos frecuentes a causa del tiempo que se invierte en llevar a cabo una auditoria de seguridad y los interminables informes que le siguen. Adopte un enfoque DevSecOps e integre los requisitos de seguridad en su proceso desde el principio.
  • Tenga en cuenta los requisitos de las pruebas manuales: dependiendo de cuál sea su negocio, puede incorporar algunas pruebas exploratorias manuales para identificar modos de fallo inesperados. En lugar de exigir pruebas manuales de cada cambio de código, puede tener fases opcionales o procesos alternativos que se ejecuten de forma semanal o mensual.
  • Automatice el lanzamiento: aunque la entrega continua implica que la decisión de lanzar a producción es manual, el lanzamiento en sí debe ser automático. Debería poder lanzar una buena compilación al público con un solo comando.

Los valores de la entrega continua

La entrega continua permite a los equipos publicar software con mayor rapidez y frecuencia, lo que reduce el número de errores que llegan a producción. La clave para lograrlo es garantizar que el código esté siempre listo para su publicación, probando continuamente los cambios y resolviendo los problemas en cuanto se descubren.

Además, la entrega continua tiene muchas otras ventajas:

  • Publicar con más frecuencia significa acelerar el tiempo de comercialización, ya que las nuevas funcionalidades, correcciones y mejoras llegan antes a los usuarios.
  • El proceso de pruebas continuas le permite obtener rápidamente comentarios sobre su trabajo. Si hay un cambio reciente que introduce una vulnerabilidad, hace que la aplicación se cuelgue en determinadas circunstancias o falle una llamada a la API, se enterará mucho antes de lo que lo haría con un proceso tradicional de pruebas de lanzamiento.
  • Descubrir los problemas antes hace que el proceso de desarrollo sea más eficaz. No solo porque tiene dicho cambio relativamente fresco, sino porque también hay menos riesgo de haber añadido otros cambios de código que se basan en el código defectuoso.
  • Automatizar las tareas repetitivas de compilación, prueba y publicación garantiza que se realicen de forma coherente y reduce el riesgo de errores, además de que permite que los miembros del equipo se centren en añadir valor.
  • Invertir en pruebas automatizadas le ayuda a probar el software de forma más exhaustiva. Esto incluye la realización de pruebas coherentes en varias plataformas, la comprobación del cumplimiento de los requisitos de accesibilidad o la evaluación del rendimiento de su producto o servicio.
  • La actualización automática de entornos y la implementación de compilaciones le ayudan a utilizar la infraestructura de forma más eficiente, ya se trate de servidores locales o de una granja de compilaciones alojada en la nube.
  • La automatización de las implementaciones en los entornos de almacenamiento provisional garantiza que los equipos de producto, marketing y asistencia puedan previsualizar las nuevas funcionalidades sin el esfuerzo manual adicional de los equipos de desarrollo u operaciones.
  • La entrega continua hace que el proceso de publicación sea sólido y replicable, y le da el control sobre el momento exacto de la publicación. Con un proceso de entrega continua en marcha, puede optar por ofrecer pequeñas mejoras cada semana, cada día o incluso cada hora.

Los retos de la entrega continua

La implementación de un proceso de entrega continua plantea algunos retos:

  • Cooperación entre equipos: es probable que necesite la cooperación de distintas partes de su organización, como los equipos de operaciones, infraestructura y seguridad. Aunque a veces es complicado eliminar barreras a corto plazo, la colaboración y la eficacia mejoran con el tiempo.
  • Inversión de tiempo: automatizar los procesos de compilación, prueba y publicación lleva tiempo. Sin embargo, adoptar un enfoque iterativo y desarrollar el proceso a largo plazo lo hace más manejable. Recopilar métricas, como las tasas de defectos o los tiempos de compilación, y compararlas con los procedimientos manuales es una forma eficaz de demostrar la rentabilidad de la inversión a los grupos de interés.
  • Retos de ampliación: a medida que amplíe el proceso de entrega continua, quizás quiera empezar a ejecutar varias compilaciones y pruebas en paralelo. En este punto, el número de servidores disponibles puede convertirse en un factor limitante. Cuando haya optimizado el rendimiento del proceso, puede pasar a una infraestructura alojada en la nube para que su granja de compilaciones crezca según lo necesite.

Buenas prácticas de la entrega continua

Crear un proceso de entrega continua puede parecer desalentador, pero, si se hace bien, puede acelerar drásticamente la publicación de software y minimizar los errores.

La adopción de la mentalidad DevOps es fundamental para la implantación eficaz de la entrega continua. En lugar de ver el proceso de desarrollo de software como una cinta transportadora unidireccional, en la que los requisitos, el código o los informes pasan de un equipo al siguiente, en DevOps predomina la colaboración y los comentarios rápidos en ciclos breves e iterativos.

Cambiar el concepto que tiene de «hecho» puede serle de ayuda para adoptar dicha mentalidad. En lugar de considerar que la tarea se ha completado al entregar el código para que se compruebe, la nueva funcionalidad o el cambio de código solo se completarán cuando se publiquen. Si se detecta alguna incidencia en algún momento del proceso, comunicar esos comentarios con rapidez y colaborar para solucionarlo logra una resolución más ágil que los extensos informes que deben pasar por un panel de cambios para su aprobación. De eso se trata la entrega continua.

Para obtener más consejos sobre cómo empezar con la entrega continua, lea nuestra guía de mejores prácticas de integración y entrega continuas.

Conclusión

La entrega continua facilita y agiliza el lanzamiento de software, lo que le permite implementar a producción con mucha más frecuencia. En lugar de un gran lanzamiento anual o trimestral, se lanzan pequeñas actualizaciones con frecuencia. Esto no solo significa que los usuarios obtienen las nuevas funciones y reparación de errores mucho antes, sino también que usted puede ver cómo se utiliza su software en la vida real y adaptar sus planes en consecuencia.

Aunque algunas organizaciones prefieren mantener el control del último paso del proceso de lanzamiento, para otras, la conclusión lógica de un proceso de CI/CD es automatizar el lanzamiento al público, utilizando una práctica denominada implementación continua. Para obtener más información, lea la siguiente sección de nuestra guía de CI/CD.

Cómo puede ayudarle TeamCity

TeamCity es una plataforma de CI/CD compatible con una amplia gama de herramientas de compilación, marcos de trabajo de pruebas, contenedores y proveedores de infraestructura en la nube. Tanto si desea alojar sus máquinas de compilación de forma local, en la nube o utilizar una combinación de ambos, TeamCity coordinará las tareas de compilación para lograr la máxima eficiencia.

La lógica de procesos de TeamCity se puede personalizar, lo que significa que puede elegir cuándo ejecutar procesos en paralelo ―como pruebas en diferentes plataformas― y cuándo requerir que deban haberse completado con éxito antes de pasar a la siguiente fase. Las notificaciones configurables le ofrecen la información que necesita allá donde esté trabajando y evitan interrupciones innecesarias. Por último, los resultados detallados le permiten asegurarse de que va en el buen camino hacia la producción.