La batalla entre Jenkins y GitLab CI/CD

En la última década se han logrado avances significativos en el desarrollo de herramientas de integración continua (Continuous Integration, CI) y entrega continua (Continuous Delivery, CD). El desarrollo de tecnologías de operaciones de desarrollo de software (Development Operations, DevOps) ha llevado a un rápido aumento de la demanda de herramientas CI/CD. Las soluciones existentes se mejoran continuamente, buscando mantenerse al día con los tiempos, y se lanzan nuevas versiones, mientras que en el ámbito del control de calidad del software (Quality Assurance, QA) surgen constantemente nuevos productos. Con tal abundancia de opciones, la elección de las herramientas adecuadas resulta ser una tarea complicada.

La batalla entre Jenkins y GitLab CI/CD

Entre todas las herramientas CI/CD existentes, hay dos proyectos que, definitivamente, merecen la atención de quienes buscan algo en este ámbito. Se trata de Jenkins y de la herramienta GitLab CI/CD, que forma parte de la plataforma GitLab. Jenkins tiene más de 16000 estrellas en GitHub. El repositorio de GitLab en gitlab.com ha acumulado un poco más de 2000 estrellas. Si comparamos la popularidad de los repositorios, descubriremos que Jenkins ha acumulado 8 veces más estrellas que la plataforma que incluye GitLab CI/CD. Sin embargo, al elegir una herramienta CI/CD, este no es el único indicador a tener en cuenta. Hay muchos otros, y esto explica que en muchas comparaciones, Jenkins y GitLab CI/CD estén muy cerca uno del otro.

Tomemos, por ejemplo, los datos de la plataforma G2, que acumula reseñas sobre diversos productos y las calificaciones que les otorgan los usuarios. Aquí, la calificación promedio de Jenkinscon base en 288 reseñas es de 4,3 estrellas. En cuanto a GitLab aquí hay 270 reseñas, y la calificación promedio de esta herramienta es de 4,4 estrellas. No nos equivocamos al afirmar que Jenkins y GitLab CI/CD compiten en igualdad de condiciones. Es interesante notar que el proyecto Jenkins surgió en 2011 y desde entonces ha sido la herramienta preferida de los testers. Sin embargo, el proyecto GitLab CI/CD, lanzado en 2014, ha alcanzado una posición muy alta gracias a las avanzadas capacidades que ofrece esta plataforma.

Si hablamos de la popularidad de Jenkins en comparación con otras plataformas similares, es importante destacar que al publicar un artículo en el que comparamos las plataformas Travis CI y Jenkins, realizamos una encuesta. En ella participaron 85 usuarios. Se les pidió a los encuestados que eligieran la herramienta CI/CD que más les gusta. El 79% eligió Jenkins, el 5% eligió Travis CI, y el 16% indicó que prefieren otras herramientas.

La batalla entre Jenkins y GitLab CI/CD
Resultados de la encuesta

Entre otras herramientas CI/CD, GitLab CI/CD fue la que más se mencionó.

Si te tomas en serio DevOps, debes elegir las herramientas adecuadas, considerando las características del proyecto, su presupuesto y otros requisitos. Para ayudarte a hacer la elección correcta, vamos a realizar un análisis de Jenkins y GitLab CI/CD. Esperamos que esto te ayude a tomar la mejor decisión.

Introducción a Jenkins

La batalla entre Jenkins y GitLab CI/CD
Jenkins es una herramienta CI/CD ampliamente reconocida y flexible, diseñada para automatizar numerosas tareas relacionadas con proyectos de software. Jenkins está completamente escrito en Java y se publica bajo la licencia MIT. Cuenta con un potente conjunto de características orientadas a la automatización de tareas relacionadas con compilación, prueba, despliegue, integración y lanzamiento de software. Esta herramienta se puede utilizar en diversos sistemas operativos, incluidos macOS, Windows y muchas distribuciones de Linux, como OpenSUSE, Ubuntu y Red Hat. Existen paquetes de instalación de Jenkins diseñados para diferentes sistemas operativos, y esta herramienta se puede instalar en Docker y en cualquier sistema que tenga JRE (Java Runtime Environment).

Los desarrolladores de Jenkins han creado otro proyecto, Jenkins X, que está diseñado para funcionar en un entorno de Kubernetes. Jenkins X integra Helm, el servidor Jenkins CI/CD, Kubernetes y otros herramientas destinadas a crear canalizaciones CI/CD que sigan las mejores prácticas de DevOps. Por ejemplo, aquí se utiliza GitOps.

Entre las ventajas de Jenkins se puede añadir que sus scripts están muy bien estructurados, son claros y fáciles de leer. El equipo de Jenkins ha creado alrededor de 1000 complementos enfocados en facilitar la interacción de Jenkins con diversas tecnologías. En los scripts se pueden utilizar sistemas de autenticación, lo que permite, por ejemplo, conectarse a diferentes sistemas cerrados.

Durante el funcionamiento del conveyor de Jenkins, se puede observar lo que ocurre en cada uno de sus pasos, así como si las diferentes etapas del trabajo se han completado exitosamente o no. Se puede monitorear todo esto sin necesidad de utilizar una interfaz gráfica, aprovechando las capacidades de la terminal.

Características de Jenkins

Entre las características más destacadas de Jenkins se encuentran la facilidad de configuración, un alto nivel de automatización de diversas operaciones y una excelente documentación. En el contexto de las tareas de DevOps, Jenkins se considera una herramienta bastante confiable, y generalmente no es necesario vigilar el proceso de procesamiento del proyecto de manera cercana. Esto no ocurre con otras herramientas de CI/CD. Hablemos de algunas de las principales capacidades de Jenkins.

▍1. Gratuito, código abierto, soporte para múltiples plataformas

Jenkins puede operar en plataformas macOS, Windows y Linux. También puede funcionar en un entorno Docker, lo que permite la ejecución uniforme y rápida de tareas automatizadas. Además, esta herramienta puede ejecutarse como un servlet en contenedores que admiten Java, como Apache Tomcat y GlassFish. La instalación de Jenkins está bien documentada.

▍2. Ecosistema de plugins desarrollado

El ecosistema de plugins de Jenkins es considerablemente más avanzado en comparación con los ecosistemas de módulos adicionales de otras herramientas de CI/CD. Actualmente, existen más de 1500 plugins para Jenkins. Estos plugins están destinados a resolver una amplia gama de tareas, permitiendo automatizar diversos proyectos. La gran variedad de módulos gratuitos significa que quienes utilizan Jenkins no tienen una necesidad urgente de adquirir costosos plugins de pago. Existe la posibilidad de integración Jenkins con numerosas herramientas de DevOps.

▍3. Instalación y configuración sencillas

Jenkins es bastante fácil de instalar y configurar. Además, el proceso de actualización del sistema también está diseñado de manera muy conveniente. Nuevamente, vale la pena mencionar la calidad de la documentación, ya que se pueden encontrar respuestas a diversas preguntas relacionadas con la instalación y configuración de Jenkins.

▍4. Comunidad amigable

Como se mencionó anteriormente, Jenkins es un proyecto de código abierto, cuya ecosistema incluye una gran cantidad de complementos. Alrededor de Jenkins se ha formado una amplia comunidad de usuarios y desarrolladores que ayudan en el desarrollo del proyecto. La comunidad es uno de los factores que contribuyen al crecimiento de Jenkins.

▍5. Disponibilidad de REST API

Al trabajar con Jenkins, se puede utilizar REST API, lo que amplía las capacidades del sistema. La API para el acceso remoto al sistema se presenta en tres formatos: XML, JSON con soporte para JSONP y Python. Aquí página de documentación que revela detalles sobre el uso de REST API de Jenkins.

▍6. Soporte para la ejecución paralela de tareas

Jenkins admite la paralelización de tareas de DevOps. Se puede integrar fácilmente con las herramientas correspondientes y recibir notificaciones sobre los resultados de la ejecución de tareas. La ejecución de pruebas de código se puede acelerar mediante la organización de la construcción paralela del proyecto utilizando diferentes máquinas virtuales.

▍7. Soporte para trabajar en entornos distribuidos

Jenkins permite organizar construcciones distribuidas utilizando varias computadoras. Esta capacidad es aplicable en grandes proyectos y utiliza un esquema de funcionamiento donde existe un servidor principal de Jenkins y varias máquinas subordinadas. Las máquinas subordinadas pueden utilizarse en situaciones donde es necesario organizar pruebas de proyectos en diferentes entornos. Estas capacidades distinguen favorablemente a Jenkins de otros proyectos similares.

Introducción a GitLab

La batalla entre Jenkins y GitLab CI/CD
GitLab CI/CD se puede considerar como una de las herramientas más nuevas y más queridas por los ingenieros de DevOps. Esta herramienta gratuita de código abierto está integrada en el sistema de control de versiones de GitLab. La plataforma GitLab tiene una versión community que admite la gestión de repositorios, herramientas para el seguimiento de problemas, organización de revisiones de código y mecanismos orientados a la creación de documentación. Las empresas pueden instalar GitLab localmente, conectando este sistema con Active Directory y servidores LDAP para organizar autorización y autenticación seguras de los usuarios.

Aquí video tutorial que te ayudará a aprender cómo crear pipelines CI/CD utilizando las capacidades de GitLab CI/CD.

Inicialmente, GitLab CI/CD se lanzó como un proyecto independiente, pero en 2015, este conjunto de herramientas se integró en GitLab 8.0. Un servidor GitLab CI/CD separado puede soportar más de 25000 usuarios. Con estos servidores se pueden crear sistemas que se caracterizan por su alta disponibilidad.

GitLab CI/CD y el proyecto principal GitLab están escritos en Ruby y Go. Se publican bajo la licencia MIT. GitLab CI/CD, además de las capacidades ordinarias de las herramientas CI/CD, también soporta funciones adicionales relacionadas, por ejemplo, con la programación de trabajos.

Integrar GitLab CI/CD en un proyecto es muy sencillo. Al usar GitLab CI/CD, el proceso de manejo del código del proyecto se divide en etapas, cada una de las cuales puede constar de varias tareas que se ejecutan en un orden específico. Las tareas son ajustables.

Las tareas pueden ejecutarse en paralelo. Después de configurar la secuencia de etapas y tareas, el pipeline de CI/CD está listo para operar. Se puede supervisar el progreso observando el estado de las tareas. Como resultado, usar GitLab CI/CD es muy conveniente, quizás más que otras herramientas similares.

Características de GitLab CI/CD y GitLab

GitLab CI/CD es una de las herramientas de DevOps más populares. El proyecto se distingue por su documentación de calidad, y sus capacidades son fáciles y agradables de usar. Si aún no estás familiarizado con GitLab CI/CD, la siguiente lista de características de esta herramienta te dará una idea general de lo que se puede esperar de ella. Cabe destacar que muchas de estas características están relacionadas con la plataforma GitLab en sí, en la que se integra GitLab CI/CD.

▍1. Popularidad

GitLab CI/CD es una herramienta relativamente nueva que ha encontrado una amplia aplicación. GitLab CI/CD ha llegado a ser una herramienta de CI/CD extremadamente popular, utilizada para pruebas automatizadas y despliegue de software. Es fácil de configurar. Además, es una herramienta de CI/CD gratuita integrada en la plataforma GitLab.

▍2. Soporte para GitLab Pages y Jekyll

Jekyll es un generador de sitios estáticos que se puede utilizar en el marco del sistema GitLab Pages para crear sitios basados en repositorios de GitLab. El sistema toma los materiales fuente y genera un sitio estático listo utilizando esos materiales. Se puede gestionar la apariencia y las funcionalidades de tales sitios editando el archivo _config.yml, utilizado por Jekyll.

▍3. Capacidades de programación de proyectos

Gracias a la planificación de las etapas de los proyectos, se mejora la facilidad para rastrear problemas y agruparlos. Esto permite gestionar la organización de las tareas del proyecto y planificar su realización en una fecha específica.

▍4. Escalado automático de CI runners

El escalado automático de los runners, responsables de ejecutar tareas específicas, permite ahorrar significativamente en costos de alquiler de potencia de servidores. Esto es muy importante, especialmente en entornos donde se realizan pruebas de proyectos en paralelo. Además, es crucial para grandes proyectos compuestos por varios repositorios.

▍5. Herramientas para el rastreo de problemas

Las potentes capacidades de GitLab para el rastreo de problemas han llevado a que muchos proyectos de código abierto utilicen esta plataforma. GitLab CI/CD permite realizar pruebas paralelas de diferentes ramas de código. Los resultados de las pruebas se pueden analizar fácilmente en la interfaz del sistema. Esto distingue favorablemente a GitLab CI/CD de Jenkins.

▍6. Restricción de acceso a los repositorios

La plataforma GitLab admite la restricción de acceso a los repositorios. Por ejemplo, a quienes colaboran en un proyecto en un repositorio determinado se les pueden asignar permisos que correspondan a sus roles. Esto es especialmente relevante para proyectos corporativos.

▍7. Activa comunidad de soporte

Alrededor de GitLab se ha formado una activa comunidad que contribuye al desarrollo de esta plataforma y sus herramientas, en particular - GitLab CI/CD. La profunda integración de GitLab CI/CD y GitLab facilita, entre otras cosas, la búsqueda de respuestas a las preguntas que surgen al trabajar con GitLab CI/CD.

▍8. Soporte para trabajar con diferentes sistemas de control de versiones

GitLab CI/CD es un sistema que puede trabajar no solo con el código alojado en los repositorios de GitLab. Por ejemplo, el código puede almacenarse en un repositorio de GitHub, y el pipeline de CI/CD puede organizarse en base a GitLab usando GitLab CI/CD.

Comparación entre Jenkins y GitLab CI/CD

Jenkins y GitLab CI/CD son herramientas muy buenas, cada una de las cuales puede garantizar el funcionamiento adecuado de un pipeline de CI/CD. Sin embargo, al compararlas, se puede ver que, aunque se parecen en muchos aspectos, tienen algunas diferencias.

Características
Jenkins
GitLab CI/CD

Código abierto o cerrado
Código abierto
Código abierto

Instalación
Requerido.
No es necesario, ya que es una función integrada de la plataforma GitLab.

Características únicas
Soporte para plugins.
Integración profunda en el sistema de control de versiones.

Soporte
No disponible.
Disponible.

Instalación y configuración
No presenta dificultades
No presenta dificultades

Despliegue autónomo del sistema
Esta es la única forma de utilizar el sistema.
Es compatible.

Creación de pipelines CI/CD
Compatible, utiliza Jenkins Pipeline.
Es compatible.

Monitoreo del rendimiento de aplicaciones
No disponible.
Disponible.

Ecosistema
Existen más de 1000 plugins.
El sistema se desarrolla dentro de GitLab.

API
Soporta un sistema de API avanzado.
Ofrece API para una integración más profunda en los proyectos.

Soporte para JavaScript
Disponible.
Disponible.

Integración con otras herramientas
Soporta la integración con otras herramientas y plataformas (Slack, GitHub).
Numerosos medios para la integración con sistemas externos, especialmente con GitHub y Kubernetes.

Control de calidad del código
Soportado — a través del plugin SonarQube y otros plugins.
Es compatible.

Diferencias entre Jenkins y GitLab CI/CD

Habiendo descrito y comparado Jenkins y GitLab CI/CD, centrémonos en las diferencias entre estas herramientas DevOps. Conocer estas diferencias permitirá a quienes prefieren una de estas herramientas sobre la otra.

  • GitLab CI/CD puede controlar completamente los repositorios Git. Se refiere al manejo de ramas de los repositorios y algunas otras capacidades. Por otro lado, Jenkins, aunque también puede trabajar con repositorios, no ofrece el mismo nivel de control que GitLab CI/CD.
  • Jenkins es un proyecto de código abierto gratuito. Quien lo elige, lo despliega por su cuenta. En cambio, GitLab CI/CD está incluido en la plataforma GitLab, siendo una solución lista para usar.
  • GitLab CI/CD apoya herramientas de gestión de tareas avanzadas que funcionan a nivel de proyectos. Este aspecto de Jenkins está menos desarrollado.

Jenkins y GitLab CI/CD: fortalezas y debilidades

Ahora tiene una idea general de Jenkins y GitLab CI/CD. Para que conozca mejor estas herramientas, analicemos sus fortalezas y debilidades. Esperamos que ya haya tomado una decisión sobre cuál herramienta necesita. Confiamos en que esta sección le permitirá autoevaluarse.

▍Fortalezas de Jenkins

  • Gran cantidad de plugins.
  • Control total sobre la instalación de la herramienta.
  • Depuración sencilla de los runners.
  • Configuración sencilla de nodos.
  • Despliegue simple de código.
  • Un muy buen sistema de gestión de credenciales.
  • Flexibilidad y versatilidad.
  • Soporte para varios lenguajes de programación.
  • El sistema es intuitivamente comprensible.

▍Desventajas de Jenkins

  • Pueden surgir dificultades al usar complementos.
  • En proyectos pequeños, el tiempo necesario para configurarlo por sí mismo puede ser injustificadamente alto.
  • Falta de información analítica general sobre las cadenas CI/CD.

▍Ventajas de GitLab CI/CD

  • Buena integración con Docker.
  • Escalado simple de runners.
  • Ejecución paralela de tareas dentro de las etapas del pipeline CI/CD.
  • Uso de un modelo de grafo acíclico orientado para configurar las relaciones entre tareas.
  • Alto nivel de escalabilidad gracias a la posibilidad de ejecución paralela de runners.
  • Facilidad para añadir tareas.
  • Resolución simple de conflictos.
  • Sistema de seguridad confiable.

▍Desventajas de GitLab CI/CD

  • Para cada tarea hay que describir y cargar/exportar artefactos.
  • No se pueden probar los resultados de la fusión de ramas antes de la fusión real.
  • Al describir las etapas del pipeline CI/CD, no se pueden definir aún fases separadas.

Resultados

Tanto Jenkins como GitLab CI/CD tienen fortalezas y debilidades. La elección depende de las necesidades y características del proyecto concreto. Cada una de las herramientas CI/CD discutidas hoy tiene características particulares, aunque están diseñadas para resolver la misma tarea. Jenkins es una herramienta autónoma, mientras que GitLab CI/CD es parte de una plataforma destinada a la colaboración en código.

Al elegir un sistema CI/CD, es importante considerar no solo sus capacidades, sino también los costos asociados y la familiaridad de los ingenieros DevOps con las herramientas.

¿Qué herramientas CI/CD utilizas?

La batalla entre Jenkins y GitLab CI/CD

La batalla entre Jenkins y GitLab CI/CD

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster