Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=1724dc70-4ca8-4fd4-a50c-9237ed61b941

Integración continua: qué es y por qué deberías aprender a utilizarla cuanto antes

Imagen ornamental CC0 por Waldemar Brandt en Unsplash

En el mundo del software, palabras como integración continua o despliegue continuo (CI/CD) están a la orden del día. Se da por supuesto que todos los que estamos metidos en este gremio conocemos su significado y sus ventajas, pero la triste realidad es que no es así. Mucha gente no lo conoce y otra lo conoce y no lo aplica.

Por esa razón, en el artículo de hoy voy a intentar aclarar las ventajas que nos ofrece el concepto, para aseverar que, sin lugar a dudas, para hacer software de calidad, la integración continua es un requisito necesario y no negociable.

¿Qué es la integración continua (CI)?

Para poder hablar de sus ventajas, lo primero es conocer en qué consiste. La integración continua es el nombre que se le da a la automatización de las labores de compilación, test y análisis estático del código. Esto se puede conseguir de muchas maneras, y podemos llamar integración continua a todo lo que hay entre un script que periódicamente ejecuta el trabajo y un servicio online que lo haga.

La integración continua (continuous integration en inglés) es un modelo informático propuesto inicialmente por Martin Fowler que consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes. Entendemos por integración la compilación y ejecución de pruebas de todo un proyecto. (Wikipedia)

¿Cómo funciona?

Independientemente del sistema que utilicemos para iniciarlo (tarea programada, un Webhook, etc), el proceso como mínimo seguirá el siguiente camino:

La imagen muestra el flujo de trabajo de la integración continua

  1. Descargará el código fuente desde el repositorio de control de versiones (git, SVN, Mercurial...).
  2. Compilará el código según sea necesario.
  3. Realizará las pruebas unitarias y/o de integración.
  4. Publicará los resultados de modo que sea accesibles.

Dependiendo de lo integrado que esté el servicio con el repositorio de código, podemos verlo directamente en el historial de commits. Por ejemplo en el caso de GitHub:

La imagen muestra un ejemplo de la integración de los resultados en github

¿Cuándo debería ejecutarla?

Lo ideal, es ejecutarla siempre que se añadan cambios al repositorio principal. Pero esto tiene un coste. Compilar cada cambio que hacemos nos da cierta seguridad, pero puede hacer que nuestro sistema de CI trabaje más de la cuenta y suponga un coste adicional. En cambio, aplicarla a todos los pull request nos garantiza que todos los cambios sobre la línea principal de trabajo van a funcionar bien. Aquí se trata de encontrar un equilibrio entre coste y beneficio.

Si nuestro proyecto es Open Source, existen varios servicios de integración continua online gratuitos como Travis CI, AppVeyor, Azure Pipelines, Circle CI.

¿Y qué me aporta?

Las principales ventajas que tiene son:

  • Detectar rápidamente los posibles errores de compilación de nuestro código. (en mi máquina funcionaba...)
  • Detectar funcionamientos anómalos en nuestro software. (es un bug, no una nueva característica)
  • Mejorar la calidad de nuestros productos
  • Nos permite compilar/testear nuestro código en diferentes plataformas.

En conclusión

Con el gran abanico de posibilidades que existen hoy en día para poder añadir integración continua a nuestro código, no hacerlo no es una opción. Da igual si es un proyecto grande o pequeño, da igual si eres un único desarrollador o un equipo. Existen incluso algunas opciones gratuitas que nos permiten hacerlo.

¿Quién no ha oído nunca el "en mi máquina funcionaba"? En mi experiencia personal, es una respuesta que he oído varias veces (y yo mismo he dicho). La integración continua es una solución muy eficaz para evitar ese tipo de problemas y poder aportar valor con nuestro software sin tener que perder horas y horas (que muchas veces no se tienen) en compilar nuestro proyecto para varias plataformas, ejecutar pruebas, analizadores de código...

Fecha de publicación:
Jorge Turrado Jorge lleva en el mundo de la programación desde los tiempos de .Net Framework 3.0. Es experto en la plataforma .NET, en Kubernetes y en técnicas de integración continua entre otras cosas. Actualmente trabaja como Staff SRE en la empresa SCRM Lidl International Hub. Microsoft lo ha reconocido como MVP en tecnologías de desarrollo, es CNCF Ambassador y maintainer oficial de KEDA, el autoescalador de Kubernetes basado en eventos. Puedes seguirlo en Twitter: @JorgeTurrado o en su blog FixedBuffer Ver todos los posts de Jorge Turrado
Archivado en: Herramientas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (2) -

Hola, gracias por la introducción a CI.

¿Podrías dar alguna orientación o propuesta de documentación de por dónde empezar con la CI para proyectos web de Microsoft Visual Studio 2019 y/o qué herramientas te parecen mejores en este ámbito?. Gracias de antemano

Responder

Jorge Turrado
Jorge Turrado

Buenos días Guillermo,
Perdona la tardanza en contestar :)
La verdad es que hay bastante documentación interesante que se puede utilizar dentro de la documentación oficial de las diferentes plataformas.

Por ejemplo si quieres usar GitHub Actions, puedes echar un ojo a este enlace:
docs.github.com/.../building-and-testing-net
Este ejemplo es de Azure DevOps:
docs.microsoft.com/.../dotnet-core

He elegido estos dos por ser los más sencillos y preparados para .Net, pero hay otros muchos servicios que puedes emplear.

Un saludo

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.