Herramientas de integración continua

Max Rehkopf Max Rehkopf

Resumen: la integración continua (CI) es una práctica recomendada propia de las metodologías ágil y DevOps que permite a varios desarrolladores contribuir y colaborar en una base de código compartida a un ritmo rápido. Sin esta integración, la colaboración entre desarrolladores se convierte en un proceso manual y tedioso de coordinación de fusiones y actualizaciones de código.

Pilares de la integración continua

La CI se basa en las prácticas recomendadas de desarrollo de software de las metodologías ágil y DevOps, como las pruebas automatizadas, el control de versiones, la automatización de compilaciones y las implementaciones automatizadas. Cada uno de estos pilares de integración continua tiene su propio ecosistema de herramientas y filosofías. Los proveedores de herramientas de desarrollo de software han comenzado a servir ofertas completas de "CI como servicio" que agrupan estos pilares en un paquete integral. Para conocer mejor estos paquetes, vamos a revisar la base.

Control de versiones

Probablemente el pilar más importante de la integración continua, el sistema de control de versiones, se utiliza para comunicar y resolver conflictos de edición entre varios desarrolladores que trabajan en el mismo código base. El control de versiones está disponible con diferentes herramientas y las más populares son Git y Subversion. Los productos de CI como servicio se centran en el sistema de control de versiones.

Pruebas automatizadas

Los proyectos de software más serios incluyen un código base adicional que no es responsable explícitamente de las funciones y el producto empresariales. Este código base secundario es un conjunto de pruebas y actúa como una serie de aserciones para garantizar que el código base principal funciona correctamente y sin errores. Durante el desarrollo, los desarrolladores ejecutan estas pruebas para verificar que el nuevo código no ha causado ninguna regresión en las funciones existentes. Estos casos de prueba también pueden ejecutarse con herramientas extrañas para automatizar el proceso de validación. Los productos de servicio de CI ejecutan automáticamente los casos de prueba de un proyecto en eventos especificados por el usuario. Por lo general, cuando un desarrollador envía código con el sistema de control de versiones, un evento desencadenará el conjunto de pruebas completo para que se ejecute automáticamente.

Automatización de compilaciones

Las "compilaciones" son los artefactos creados para hacer una instantánea de la versión de publicación actual de un proyecto de software. Las compilaciones se distribuyen a los usuarios finales a través de diferentes redes. Habitualmente, hay un conjunto de pasos con guion que un proyecto tomará para crear un artefacto de compilación. Las herramientas de CI ayudan a optimizar este proceso de compilación con el uso de desencadenadores automáticos del sistema de control de versiones. Un ejemplo de desencadenador sería este: cuando el nuevo código se fusiona con la rama de producción del código base, la compilación se carga en un servidor remoto para que los usuarios la descarguen.

Despliegues automatizados

Cuando las compilaciones están listas para la distribución, pasan por un proceso de implementación. Puede haber diferentes resultados, dependiendo de la implementación del proyecto. Por ejemplo, los proyectos web se implementan en servidores web de acceso público. Durante esta implementación, el artefacto generado en la fase de compilación se copia en los servidores web. El proceso de implementación para dispositivos móviles y equipos de escritorio varía y puede implicar la carga en una "tienda" para que los usuarios puedan descargar la aplicación.

Comparación de herramientas de integración continua

Bitbucket Pipelines

Resumen: Bitbucket Pipelines es una herramienta de CI integrada directamente en Bitbucket, un sistema de control de versiones en la nube que ofrece Atlassian. Bitbucket Pipelines es un paso sencillo para habilitar CI si tu proyecto ya está en Bitbucket. Bitbucket Pipelines se gestiona como código para que puedas confirmar fácilmente las definiciones de canalización y poner en marcha compilaciones. Bitbucket Pipelines también ofrece CD. De esta forma, los proyectos compilados con Bitbucket Pipelines también se pueden implementar en la infraestructura de producción

Funciones:

  • Instalación y configuración sencillas
  • Experiencia de Bitbucket unificada
  • Nube de terceros

Sitio web: https://bitbucket.org/product/features/pipelines

Jenkins

Resumen: Jenkins es una herramienta de CI con una larga trayectoria probada. Es de código abierto y está impulsada por actualizaciones de la comunidad. Jenkins está diseñado principalmente para la instalación local. Es una opción excelente si tu organización necesita soporte local para manejar datos confidenciales de clientes, como datos de cumplimiento de HIPAA.

Funciones:

  • Entorno local
  • Open Source
  • Ecosistema sólido de complementos/plugins

Sitio web: https://jenkins.io/

AWS CodePipeline

Resumen: Amazon Web Services es uno de los proveedores de infraestructura de nube más importantes del mercado. Ofrecen herramientas y servicios para todo tipo de tareas de desarrollo de infraestructura y código. CodePipeline es su herramienta de CI. CodePipeline puede interactuar directamente con otras herramientas de AWS existentes para proporcionar una experiencia perfecta de AWS.

Funciones:

  • Totalmente en la nube
  • Integración con Amazon Web Services
  • Soporte para complementos personalizados
  • Control de acceso sólido

Sitio web: https://aws.amazon.com/codepipeline/

CircleCI

Resumen: CircleCI es una herramienta de CI que se integra a la perfección con Github, una de las herramientas más populares de alojamiento en la nube de sistema de control de versiones. CircleCI es una de las herramientas de CI más flexibles, ya que soporta una matriz de sistemas de control de versiones, sistemas de contenedores y mecanismos de entrega. CircleCI puede alojarse de forma local o utilizarse a través de un servicio en la nube.

Funciones:

  • Desencadenadores de notificaciones a partir de eventos de CI
  • Rendimiento optimizado para compilaciones rápidas
  • Depuración sencilla a través de compilaciones locales y SSH
  • Análisis para medir el rendimiento de compilación

Sitio web: https://circleci.com/

Azure Pipelines

Resumen: Azure es la plataforma de infraestructura en la nube de Microsoft, el equivalente de Microsoft a Amazon Web Services. Al igual que AWS CodePipeline, Azure ofrece una herramienta de CI totalmente integrada en el conjunto de herramientas de alojamiento de Azure.

Funciones:

  • Integración con la plataforma Azure
  • Compatibilidad con la plataforma Windows
  • Soporte para contenedores
  • Integración con Github

Sitio web: https://azure.microsoft.com

GitLab

Resumen: Gitlab es una nueva herramienta de CI que ofrece una experiencia completa de DevOps. Gitlab se creó con la intención de mejorar la experiencia general de Github. Gitlab ofrece una interfaz de usuario actual y es compatible con contenedores.

Funciones:

  • Alojamiento local o en la nube
  • Pruebas de seguridad continuas
  • Interfaz de usuario sencilla

Sitio web: https://about.gitlab.com

Atlassian Bamboo

Resumen: otro servicio de CI de Atlassian. Mientras que Bitbucket Pipelines es una opción estrictamente alojada en la nube, Bamboo ofrece una alternativa autoalojada.

Funciones:

  • Mejor integración con el conjunto de productos Atlassian
  • Un amplio mercado de complementos y plugins
  • Soporte para contenedores con agentes de Docker
  • API de desencadenador para la funcionalidad IFTTT

Sitio web: https://www.atlassian.com/software/bamboo

¿Cuál es la mejor herramienta de CI para tu empresa?

Al elegir una herramienta de CI para tu equipo, hay algunos factores importantes que deben tenerse en cuenta.

Soporte para sistemas de control de versiones

El pilar central de un sistema de CI/CD es la compatibilidad y la integración del sistema de control de versiones (VCS, por sus siglas en inglés) subyacente. Los VCS más populares son Git, Subversion, Mercurial y Perforce. Las herramientas de CI en la nube pueden ser compatibles con algunos o todos estos VCS. Es fundamental elegir una herramienta de CI que ofrezca compatibilidad para el VCS de tus proyectos.

Local o en la nube

Algunas de las herramientas de CI mencionadas, como Jenkins, se pueden instalar de forma local. En consecuencia, tu equipo debe encargarse de configurar y gestionar el sistema de CI en tu propia infraestructura. Esto puede tener ventajas en términos de privacidad y seguridad. Por ejemplo, si necesitas cumplir con ciertos estándares en relación con la privacidad de datos del cliente, el alojamiento local puede ser un requisito. Además, las instancias locales pueden ofrecer opciones de personalización y configuración más avanzadas.

El alojamiento local puede dar trabajo adicional que no se corresponda con las necesidades principales de tu negocio. Las opciones en la nube externalizan la gestión de la herramienta de CI con un proveedor externo. En este caso, la empresa de alojamiento en la nube gestiona el tiempo de actividad, el soporte y el escalado de la herramienta de CI, y tu equipo puede centrarse en las necesidades principales de la empresa. Esto puede ser una gran ventaja para equipos con presupuesto ajustado o empresas más pequeñas que necesitan centrarse con absoluta prioridad en los objetivos de adecuación al mercado de productos.

Soporte para contenedores

La contenedorización es una tendencia moderna de desarrollo de software. Permite la distribución de una copia inmutable, repetible y aislada de una aplicación. Esta estrategia es posible mediante herramientas como Docker y Kubernetes. Las herramientas modernas de CI ofrecerán soporte para integrar contenedores en el proceso de CI/CD. Los contenedores resuelven el problema del "¡A mí me funciona!", al garantizar que el código de la aplicación se empaqueta en una instantánea congelada de las dependencias a nivel de sistema. Esto garantiza que, cuando el código de tu equipo se ejecuta en la herramienta de CI, sea una réplica del entorno local. Esto elimina toda una clase de incidencias de solución de problemas de paridad de entorno que surgen sin los contenedores.

Integraciones de terceros y complementos

Las herramientas de CI son todavía más útiles si se integran con el resto de tus recursos tecnológicos. Con las herramientas de CI se pueden recopilar análisis sobre la eficiencia y el rendimiento del equipo de ingeniería. Se pueden vincular aplicaciones de planificación de sprint con herramientas de CI para actualizar automáticamente el estado de sprint cuando se ha entregado el código. Estas integraciones se pueden utilizar como referencia para las hojas de ruta y los KPI del equipo de ingeniería.

Primeros pasos con CI

Una herramienta moderna de CI es un requisito fundamental para que tu equipo de ingeniería pueda tener un alto rendimiento. Mediante una herramienta de CI, los equipos de ingeniería pueden optimizar su velocidad de comunicación y de entrega. En el mercado puedes encontrar muchas herramientas de CI populares. Los conceptos principales que debemos tener en cuenta al elegir las herramientas de CI son el soporte para sistemas de control de versiones, el alojamiento local frente a la nube, las canalizaciones de implementación y las integraciones de aplicaciones externas.