Llegamos a ustedes gracias a:



Reportajes y análisis

CI/CD: 11 opciones para una integración y distribución continuas

integración continua (CI), distribución continua (CD)

[28/03/2019] Cuando un equipo desarrolla un software en conjunto, la necesidad de integración continua (CI) -y con frecuencia también de distribución continua (CD)- rara vez se debate. El servidor central de integración continua actúa como un árbitro y un administrador de control de calidad, al construir y reconstruir constantemente el software antes de probarlo y volver a probarlo. Cuanto antes el servidor de CI encuentre problemas, más pronto podrán solucionarse.

El verdadero debate es si alojar el proceso de integración continuo usted mismo, o transferir el trabajo a alguno de los muchos servicios de CI/CD basados en la nube que han brotado. Dejar que alguien más haga el trabajo siempre es atractivo, y los servicios a menudo pueden ser más rápidos porque comparten un grupo de máquinas poderosas que pueden ejecutar las diferentes tareas del proceso de CI en paralelo.

Pero las desventajas pueden ser significativas. Si su equipo está especialmente preocupado por el acceso a su código o datos, mantener todo en una máquina que se encuentra en su sala de servidores bloqueada brinda una sensación de calidez. Sí, significa actualizar los sistemas operativos y aplicar parches, pero a veces es mejor que cruzar los dedos y confiar en que alguien más lo hará.

Si su código base es grande o si produce grandes contenedores llenos de binarios, mover estos bits a través del Internet abierto puede ser lento. Muchos de los amantes de la nube tienden a ignorar los problemas de latencia y los costos de enviar grandes bloques de datos. Si solo los está llevando a la sala de servidores al final del pasillo, podría crear una red rápida que garantice que llegarán rápidamente. Sí, esto puede significar menos pausas en su día para tomar una taza de café, pero puede mejorar enormemente el tiempo de entrega.

Una de las mayores ventajas puede ser la posibilidad de agregar personalización a su compilación. Los servicios en la nube hacen un buen trabajo con bloques de código estándar configurados de la misma manera que los demás, e intentan ofrecer todos los complementos y opciones, pero nada supera el control de tener acceso de administrador a la máquina. No hay duda de que los canales preconfigurados para muchas de las opciones de la nube ahorran tiempo, pero pueden restringirse cuando comience a caminar fuera del camino transitado. La capacidad de hacer lo que quiera hace que una implementación local sea una opción atractiva.

Aquí hay 11 soluciones para desarrollar servicios de integración continua en sus instalaciones.

Jenkins

El primer lugar en el que muchos se encuentran es Jenkins, la herramienta de integración continua original que comenzó su vida con los desarrolladores de Java en Sun Microsystems. Los ingenieros de Sun fueron lo suficientemente inteligentes como para no limitar la arquitectura al código Java, y hoy en día hay miles de plug-ins que manejan muchas de las tareas en bruto para todas las pilas principales y la mayoría de las pequeñas también. No es inusual elegir algo aleatorio como, por ejemplo, Lisp y encontrar a alguien que haya escrito un complemento para ello. El hecho de que Jenkins esté escrito en Java significa que generalmente es fácil descargar el archivo JAR y ejecutarlo en un cuadro/ventana de Windows, Mac o Linux.

El proyecto Jenkins continúa atrayendo más atención y redesarrollo. El subproyecto Blue Ocean pretende hacer posible configurar y optimizar el canal de Jenkins desde la comodidad de un navegador. Menos edición de texto de archivos de configuración y más clics.

El equipo de Jenkins ha estado trabajando para facilitar la ejecución del servidor de CI en cualquier lugar, al reducir la cantidad de trabajo necesario para configurar y actualizar la herramienta. La versión de Evergreen se configurará, construirá y actualizará desde los contenedores de Docker. Es como un médico cosiendo una herida de bala en su propia pierna.

JetBrains TeamCity

La misma compañía que ha alimentado el IDE de IntelliJ también ofrece TeamCity, una combinación de servidor de integración continua y muchos extras como métricas de calidad de código y un foro para discutir el código. JetBrains ha trabajado para maximizar la compatibilidad al integrar TeamCity con todos los principales sistemas de control de versiones, y al crear una gran colección de plug-ins para soportar diferentes idiomas. En su esencia, TeamCity es Java, pero es fácil hacerlo funcionar con otros idiomas.

El código está diseñado para ejecutarse en una amplia variedad de máquinas locales. Hay un contenedor Docker, por supuesto, y un archivo JAR de Java para ejecutar en un contenedor de servlets, pero también hay un archivo .exe de Windows. Una de las opciones más interesantes es el "compromiso previamente probado" que no ocurre en su escritorio, pero aún se ejecuta en todos los pasos de CI antes de que el código se considere oficialmente comprometido. Un mejor apodo podría ser "compromiso de dos fases" pero eso no suena tan genial.

Se dice que la versión Profesional es "gratuita para siempre", y viene con todas las características y sin límites para los usuarios o el tiempo de compilación. Aquellos que compran la versión Enterprise obtienen agentes de compilación adicionales para que se ejecuten en paralelo y pueden ser distribuidos en nubes públicas como AWS. Es una solución híbrida que le permite alojar el servidor principal a nivel local, pero activar máquinas en la nube cuando necesita la potencia adicional.

GitLab CI/CD

Muchos equipos utilizan GitLab en la nube en servidores GitLab, pero la pila es de código abierto y está disponible para ser instalada en el servidor de su elección en su sala de servidores. La edición Community puede ser verificada y creada directamente de GitLab, pero probablemente sea más fácil simplemente descargar un instalador de paquetes para su máquina y dejar que haga el trabajo. También hay una edición Enterprise pagada con más características.

El trabajo de CI para GitLab se basa en gran medida en Docker para la configuración y las pruebas, algo que puede ser más rápido y más simple que las herramientas básicas. Gran parte del trabajo es manejado por un programa llamado GitLab Runner, una herramienta de autoescala para ejecutar las etapas en el canal, que se puede instalar en múltiples servidores. También hay una buena función llamada AutoDevOps que puede analizar su código, notar la existencia de un archivo de creación estándar, y luego configurar los canales para construir, probar e implementar su software.

La pila completa de GitLab viene con mucho más que una integración continua. También ofrece control de versiones y herramientas de colaboración para la planificación, el seguimiento de problemas y la revisión del código, todo parte importante en el proceso de creación de código en ejecución.

Azure DevOps Server

Microsoft ha estado trabajando para abrir la pila de Azure a cualquiera que quiera o necesite alojarla en sus propios servidores, y la esquina de devops no es una excepción. La solución más sencilla es simplemente agregar más agentes de compilación para acelerar el trabajo. La cuenta básica de Azure DevOps viene con un agente de compilación gratuito. Puede agregar más agentes pagándole a Microsoft, la solución más simple, o instalando los agentes de compilación en sus propias máquinas con paquetes para MacOS, Linux y, por supuesto, Windows. También puede obtener agentes de compilación adicionales con otros productos de Microsoft como Visual Studio.

Si necesita más control o aislamiento, la primera versión candidata del servidor completo de Azure DevOps ya está disponible para ser instalada en su máquina. Funciona con una versión local de Azure SQL para ofrecer un paquete completo.

Oracle Container Pipelines

La antigua startup Wercker ahora es parte de Oracle, que llama al producto CI/CD adquirido por el nombre simple pero muy útil de Oracle Container Pipelines. Tiene sentido porque la herramienta está enfocada en construir, probar y desplegar contenedores Docker usando una colección de canales llenos de tareas. Si puede deletrearlo como un script Bash, puede ser una tarea.

Existen versiones instalables para Linux y Mac, lo que hace posible ejecutar el mismo código de canalización YAML en su escritorio o en una comunidad de servidores. Si necesita usar la nube, deberá construirla usted mismo. Estos son los precios de Oracle.

Shippable Server

La oferta principal de Shippable es CI/CD en la nube, pero si desea instalar su propio servidor o simplemente "traer sus propios nodos", puede usar Shippable Server. Shippable está diseñado para ser un híbrido. Puede combinar los componentes que necesita para entregar el rendimiento que su código exige.

La herramienta ofrece líneas de ensamblaje nativas que convierten el código en instancias implementadas con muchas pruebas en el camino. Las tareas de compilación y prueba estándar forman la base del servicio, pero Shippable también incluye una buena cantidad de integración con configuración (piense en Puppet o Chef) e instrumentación para medir el rendimiento de la implementación en ejecución y mostrarla en un panel visual para que pueda seguirlo.

Atlassian Bamboo

Atlassian tiene dos productos diferentes para la integración continua. Bitbucket Pipelines, que está integrado en la nube de Bitbucket; y Bamboo, que es un software que puede descargar e instalar en su propio servidor. Los dos productos están destinados a ser separados y no a ofrecer una combinación híbrida de servidor local y en la nube como algunas de las otras soluciones aquí. Sin embargo, si necesita más capacidad de compilación, Bamboo se integra con AWS para permitirle activar instancias para manejar algunas de las tareas.

Bamboo es una herramienta comercial que ofrece más funciones que Jenkins con más pulido y soporte. El producto se envía con una herramienta de conversión que cambiará el archivo de configuración de compilación al formato interno de Bamboo. El equipo de Atlassian ha agregado una serie de funciones inteligentes para ver el código base en su versión local de Bitbucket o Stash y detectar cuándo es que se pueden completar las fusiones para mantener el repositorio limpio.

La mayor parte de la documentación se centra en el apoyo a proyectos Java y .Net. Aunque es posible utilizar la herramienta para todo tipo de tareas, está optimizada para estos dos mundos. El producto es gratis por 30 días y los precios posteriores dependen del número de usuarios y del número de agentes de compilación.

Drone

Si ha creado su código para hacer de todo en los contenedores Docker, la herramienta de integración continua Drone está lista para servir. Todas las tareas de canalización se ejecutan en contenedores y luego los resultados pueden ser implementados en estos. Existe un Marketplace activo lleno de plug-ins escritos en shell script de Bash o Go que manejan todas las tareas estándar.

Puede ejecutar los canales de Drone en la nube o instalar el software en sus servidores. Dicho servicio es gratuito en una edición para desarrolladores limitada a 10 mil compilaciones por año, aunque obtiene la mayoría de las funciones principales. Pagar por la versión empresarial desbloquea las compilaciones y opciones ilimitadas, como la implementación en múltiples máquinas y los principales proveedores de la nube.

Codefresh

Codefresh se denomina a sí misma la primera plataforma de integración continua creada para Kubernetes. Las compilaciones se realizan en contenedores, y luego los resultados se van directo a los clústeres que ha configurado. Los contenedores se pueden almacenar en caché en el repositorio local y luego la implementación puede ser guiada por la gráfica de Helm.

El precio estándar y el nivel gratuito se basan en la ejecución de la herramienta en la nube de Codefresh. Si desea crear una versión híbrida o cerrada que se ejecute en sus servidores, está disponible una versión Enterprise. Puede probarlo gratis durante 14 días.

Cake

Si combina el nombre del lenguaje C# con la versión de integración continua de la vieja escuela, Make, obtendrá Cake, una herramienta diseñada para los programadores de C# que desean escribir sus scripts de compilación en C# también. No es necesario jugar con una sintaxis diferente.

Cake es de código abierto y es compatible con todas las herramientas centradas en Microsoft que disfruta usando. Puede ser la solución más simple para cualquier persona que se esté desarrollando para el mundo .Net.

IDEs y un repositorio

Los entornos de desarrollo integrado clásicos como Eclipse e IntelliJ no son lo que todos consideran como una herramienta de integración continua, pero algunos desarrolladores son capaces de generar la mayoría de las ventajas de una buena herramienta de CI sin mantener un sistema separado. Después de todo, los IDEs verifican, compilan, prueban e incluso implementan el código en contenedores si es que usted agrega los plug-ins adecuados. ¿Por qué duplicar este trabajo?

Evitar el servidor de integración continuo adicional puede ser una mejor opción si no necesita que un tercero actúe como un árbitro neutral y un agente de control de calidad. Si su equipo está trabajando de manera bastante independiente en un código que no está muy integrado, es posible que no tenga sentido mantener el servidor CI en segundo plano, porque simplemente duplica las mismas compilaciones y pruebas que ya está haciendo en su máquina de desarrollo.

Por otro lado, si hay alguna superposición en el código que está siendo manipulado por los miembros de su equipo, el trabajo adicional del servidor CI se vuelve invaluable. Es una decisión difícil de tomar, pero hay momentos en que todas las opciones estándar del IDE ofrecen suficiente integración y entrega.