Batalla de Jenkins y GitLab CI/CD

En la última década se han producido avances significativos en el desarrollo de herramientas de integración continua (Continuous Integration, CI) y de despliegue continuo (Continuous Delivery, CD). El desarrollo de tecnologías para integrar el desarrollo y la operación de software (Development Operations, DevOps) ha llevado a un rápido aumento en la demanda de herramientas de CI/CD. Las soluciones existentes se mejoran constantemente, tratando de mantenerse al día, se lanzan sus nuevas versiones, en el mundo del software de control de calidad (Quality Assurance, QA), constantemente aparecen muchos productos nuevos. Con tanta variedad, elegir la herramienta adecuada no es una tarea fácil.

Batalla de Jenkins y GitLab CI/CD

Entre todas las herramientas de CI/CD existentes, hay dos proyectos que definitivamente vale la pena prestar atención a alguien que esté buscando algo de esta área. Hablamos de Jenkins y 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 obtuvo un poco más 2000 estrellas. Si comparamos la popularidad de los repositorios, resulta que Jenkins obtuvo 8 veces más estrellas que la plataforma, que incluye GitLab CI/CD. Pero al elegir una herramienta de CI / CD, este está lejos de ser el único indicador al que debe prestar atención. Hay muchos otros, y esto explica por qué 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 de una amplia variedad de productos y las calificaciones que les dan los usuarios. Aquí está la calificación promedio Jenkins, basado en 288 reseñas, tiene 4,3 estrellas. ay ay GitLab hay 270 reseñas, la calificación promedio para esta herramienta es de 4,4 estrellas. No nos equivocaremos al decir que Jenkins y GitLab CI/CD compiten entre sí en igualdad de condiciones. Es interesante notar que el proyecto Jenkins apareció en 2011 y desde entonces ha sido una herramienta favorita para los probadores. Pero al mismo tiempo, el proyecto GitLab CI/CD, lanzado en 2014, ha tomado su posición, muy alta, gracias a las funciones avanzadas que ofrece esta plataforma.

Si hablamos de la popularidad de Jenkins en comparación con otras plataformas similares, notamos que, después de haber publicado un artículo comparando las plataformas Travis CI y Jenkins, organizamos una encuesta. Participaron 85 usuarios. Se pidió a los encuestados que eligieran la herramienta de CI/CD que más les gustara. El 79 % eligió Jenkins, el 5 % eligió a Travis CI y el 16 % indicó que prefiere otras herramientas.

Batalla de Jenkins y GitLab CI/CD
Resultados de la encuesta

Entre otras herramientas de CI/CD, GitLab CI/CD fue la más mencionada.

Si se toma en serio DevOps, debe seleccionar cuidadosamente las herramientas adecuadas, teniendo en cuenta los detalles del proyecto, su presupuesto y otros requisitos. Para ayudarlo a tomar la decisión correcta, revisaremos Jenkins y GitLab CI/CD. Con suerte, esto lo ayudará a tomar la decisión correcta.

Introducción a Jenkins

Batalla de Jenkins y GitLab CI/CD
Jenkins es una conocida herramienta de CI/CD flexible diseñada para automatizar muchas tareas relacionadas con proyectos de software. Jenkins está escrito completamente en Java y publicado bajo la licencia MIT. Tiene un poderoso conjunto de funciones destinadas a automatizar las tareas asociadas con la creación, prueba, implementación, integración y lanzamiento de software. Esta herramienta se puede utilizar en varios sistemas operativos. Estos incluyen macOS, Windows y muchas distribuciones de Linux como OpenSUSE, Ubuntu y Red Hat. Hay paquetes de instalación de Jenkins diseñados para varios sistemas operativos, esta herramienta se puede instalar en Docker y en cualquier sistema que tenga un 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, Jenkins CI/CD Server, Kubernetes y otras herramientas para crear canalizaciones de CI/CD que siguen las mejores prácticas de DevOps. Por ejemplo, GitOps se usa aquí.

Uno puede agregar al tesoro de las ventajas de Jenkins el hecho de que sus scripts están muy bien estructurados, son comprensibles y fáciles de leer. El equipo de Jenkins ha creado alrededor de 1000 complementos que tienen como objetivo organizar la interacción de Jenkins con una amplia variedad de tecnologías. Los scripts pueden usar sistemas de autenticación que, por ejemplo, le permiten conectarse a varios sistemas cerrados.

Durante la operación de la tubería de Jenkins, puede observar lo que sucede en cada paso, si ciertas etapas del trabajo se han completado con éxito o no. Sin embargo, puede ver todo esto sin usar una determinada interfaz gráfica, pero usando las capacidades de la terminal.

Características de Jenkins

Entre las características bien conocidas de Jenkins se encuentran la facilidad de configuración, un alto nivel de automatización de varias operaciones y una excelente documentación. Si hablamos de resolver tareas de DevOps, aquí Jenkins se considera una herramienta muy confiable, con la cual, por regla general, no tiene sentido monitorear de cerca todo el proceso de procesamiento del proyecto. Este no es el caso con otras herramientas de CI/CD. Hablemos de algunas de las características más importantes de Jenkins.

▍1. Soporte gratuito, de código abierto y multiplataforma

Jenkins puede ejecutarse en plataformas macOS, Windows y Linux. También puede funcionar en un entorno Docker, lo que le permite organizar una ejecución uniforme y rápida de tareas automatizadas. Esta herramienta también puede ejecutarse como un servlet en contenedores habilitados para Java, como Apache Tomcat y GlassFish. Instalación de Jenkins cualitativamente. documentado.

▍2. Ecosistema de complementos desarrollado

El ecosistema de complementos de Jenkins parece ser mucho más maduro que los ecosistemas de complementos de otras herramientas de CI/CD. Actualmente hay más de 1500 complementos para Jenkins. Estos complementos están destinados a resolver una amplia gama de tareas, con su ayuda puede automatizar una variedad de proyectos. La gran cantidad de complementos gratuitos para elegir significa que si está utilizando Jenkins, no tiene que comprar costosos complementos pagos. Hay una posibilidad integración Jenkins con muchas herramientas DevOps.

▍3. Fácil instalación y configuración

Jenkins es bastante fácil de instalar y configurar. Al mismo tiempo, el proceso de actualización del sistema también es muy conveniente. Aquí, nuevamente, vale la pena mencionar la calidad de la documentación, ya que en ella puede encontrar respuestas a una variedad de preguntas relacionadas con la instalación y configuración de Jenkins.

▍4. Comunidad amigable

Como ya se mencionó, Jenkins es un proyecto de código abierto, cuyo ecosistema incluye una gran cantidad de complementos. Una gran comunidad de usuarios y desarrolladores se ha desarrollado alrededor de Jenkins para ayudar a desarrollar el proyecto. La comunidad es uno de los factores que impulsa el desarrollo de Jenkins.

▍5. Disponibilidad de API REST

Mientras trabaja con Jenkins, puede usar la API REST, que amplía las capacidades del sistema. La API para acceso remoto al sistema se presenta en tres versiones: XML, JSON con soporte JSONP, Python. aquí está Página de documentación que cubre los detalles sobre cómo trabajar con la API REST de Jenkins.

▍6. Soporte para ejecución paralela de tareas

Jenkins admite la paralelización de tareas de DevOps. Se puede integrar fácilmente con herramientas relevantes y recibir notificaciones sobre los resultados de las tareas. Las pruebas de código se pueden acelerar organizando una compilación paralela del proyecto utilizando diferentes máquinas virtuales.

▍7. Soporte para trabajar en entornos distribuidos

Jenkins le permite organizar compilaciones distribuidas utilizando varias computadoras. Esta característica es aplicable en proyectos grandes y utiliza un esquema de trabajo, según el cual hay un servidor maestro Jenkins y varias máquinas esclavas. Las máquinas esclavas también se pueden utilizar en situaciones en las que es necesario organizar la prueba de un proyecto en diferentes entornos. Estas características distinguen a Jenkins de otros proyectos similares.

Introducción a GitLab

Batalla de Jenkins y GitLab CI/CD
GitLab CI / CD se puede llamar una de las herramientas DevOps más nuevas y queridas. 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 comunitaria, admite la gestión de repositorios, herramientas de seguimiento de problemas, organización de revisión de código, mecanismos orientados a la documentación. Las empresas pueden instalar GitLab localmente, vinculándolo a Active Directory y servidores LDAP para una autenticación y autorización de usuario segura.

aquí está Un tutorial en video para ayudarlo a aprender cómo crear canalizaciones de CI/CD usando las capacidades de CI/CD de GitLab.

GitLab CI/CD se lanzó originalmente como un proyecto independiente, pero en 2015 este conjunto de herramientas se integró en GitLab 8.0. Un solo servidor GitLab CI/CD puede admitir más de 25000 XNUMX usuarios. Con base en dichos servidores, puede crear sistemas que tengan una alta disponibilidad.

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

Integrar GitLab CI/CD en un proyecto es muy fácil. Cuando se utiliza GitLab CI/CD, el proceso de procesamiento del código del proyecto se divide en etapas, cada una de las cuales puede constar de varias tareas realizadas en un orden determinado. Las tareas se pueden ajustar.

Las tareas se pueden ejecutar en paralelo. Después de configurar la secuencia de etapas y tareas, la canalización de CI/CD está lista para funcionar. Puede monitorear su progreso al monitorear el estado de las tareas. Como resultado, usar GitLab CI/CD es muy conveniente, quizás más conveniente que otras herramientas similares.

Características de GitLab CI/CD y GitLab

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

▍1. Popularidad

GitLab CI/CD es una herramienta relativamente nueva que ha encontrado un uso generalizado. GitLab CI/CD se ha convertido lentamente en una herramienta de CI/CD muy popular que se utiliza para pruebas automatizadas e implementación de software. Es fácil de configurar. También es una herramienta gratuita de CI/CD integrada en la plataforma GitLab.

▍2. Soporte para GitLab Pages y Jekyll

Jekyll es un generador de sitios estáticos que se puede usar dentro del sistema de páginas de GitLab para crear sitios basados ​​en repositorios de GitLab. El sistema toma los materiales de origen y genera un sitio estático listo para usar basado en ellos. Puede controlar la apariencia y las características de dichos sitios editando el archivo _config.yml, utilizado por Jekyll.

▍3. Capacidades de planificación de proyectos

Gracias a la capacidad de planificar las etapas de los proyectos, aumenta la conveniencia de rastrear los problemas y sus grupos. Esto le permite administrar la organización del trabajo en proyectos, planificar su implementación en una fecha específica.

▍4. Escalado automático de corredores CI

Gracias al escalado automático de runners encargados de realizar tareas específicas, puedes ahorrar mucho en el coste del alquiler de capacidades del servidor. Esto es muy importante, especialmente cuando se trata de entornos donde los proyectos se prueban en paralelo. Además, esto es importante para proyectos grandes que constan de varios repositorios.

▍5. Herramientas de seguimiento de problemas

Las poderosas capacidades de seguimiento de problemas de GitLab han llevado a muchos proyectos de código abierto a usar la plataforma. GitLab CI/CD permite realizar pruebas paralelas de diferentes ramas de código. Los resultados de las pruebas se analizan convenientemente en la interfaz del sistema. Esto diferencia a GitLab CI/CD de Jenkins.

▍6. Restricción del acceso a los repositorios

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

▍7. Apoyo comunitario activo

Se ha desarrollado una comunidad activa en torno a GitLab, 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, entre otras cosas, facilita la búsqueda de respuestas a las preguntas que surgen al trabajar con GitLab CI/CD.

▍8. Soporte para varios sistemas de control de versiones.

GitLab CI/CD es un sistema que puede funcionar con algo más que código alojado en repositorios de GitLab. Por ejemplo, el código se puede almacenar en un repositorio de GitHub y la canalización de CI/CD se puede organizar sobre la base de GitLab usando GitLab CI/CD.

Comparación de Jenkins y GitLab CI/CD

Jenkins y GitLab CI/CD son muy buenas herramientas, las cuales son capaces de hacer que la canalización de CI/CD funcione sin problemas. Pero si los comparamos, resulta que, aunque son similares en muchos aspectos, difieren entre sí en algunos aspectos.

Caracterización
Jenkins
GitLab CI / CD

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

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

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

Apoyar
Falta
Hay.

Instalacion y configuracion
Las dificultades no causan
Las dificultades no causan

Autodespliegue del sistema
Esta es la única forma de utilizar el sistema.
Soportado.

Creación de canalizaciones de CI/CD
Compatible con Jenkins Pipeline.
Soportado.

Supervisión del rendimiento de la aplicación
Falta
Hay.

Ecosistema
Hay más de 1000 complementos.
El sistema se está desarrollando dentro de GitLab.

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

Compatibilidad con JavaScript
Hay.
Hay.

Integración con otras herramientas.
Se admite la integración con otras herramientas y plataformas (Slack, GitHub).
Muchas herramientas para la integración con sistemas de terceros, en particular, con GitHub y Kubernetes.

Control de calidad del código
Compatible: utilizando el complemento SonarQube y otros complementos.
Soportado.

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 te ayudará a entender a aquellos que prefieren una de estas herramientas sobre la otra.

  • GitLab CI/CD puede controlar completamente los repositorios de Git. Estamos hablando de administrar las ramas del repositorio y algunas otras características. Pero Jenkins, aunque puede trabajar con repositorios, no da el mismo nivel de control sobre ellos que GitLab CI/CD.
  • Jenkins es un proyecto gratuito de código abierto. Quien lo elige lo despliega de forma independiente. Y GitLab CI/CD está incluido en la plataforma GitLab, esta es una solución llave en mano.
  • GitLab CI/CD admite herramientas avanzadas de administración de tareas que funcionan a nivel de proyecto. Este lado de Jenkins está menos desarrollado.

Jenkins y GitLab CI/CD: fortalezas y debilidades

Ahora tiene una idea sobre Jenkins y GitLab CI/CD. Ahora, para que se familiarice aún mejor con estas herramientas, echemos un vistazo a sus fortalezas y debilidades. Suponemos que ya ha decidido qué herramienta necesita. Con suerte, esta sección le permitirá probarse a sí mismo.

▍Fortalezas de Jenkins

  • Una gran cantidad de complementos.
  • Control total sobre la instalación de herramientas.
  • Depuración simple de corredores.
  • Fácil configuración de nodos.
  • Fácil implementación de código.
  • Muy buen sistema de gestión de credenciales.
  • Flexibilidad y versatilidad.
  • Soporte para varios lenguajes de programación.
  • El sistema es comprensible a un nivel intuitivo.

▍Debilidades de Jenkins

  • Los complementos pueden ser complicados de usar.
  • Al usar Jenkins en proyectos pequeños, el tiempo requerido para configurarlo usted mismo puede ser excesivamente grande.
  • Falta de información analítica general sobre las cadenas CI/CD.

▍Fortalezas de GitLab CI/CD

  • Buena integración con Docker.
  • Escalado simple de corredores.
  • Ejecución en paralelo de tareas que forman parte de las etapas del pipeline de CI/CD.
  • Uso del modelo de gráfico acíclico dirigido al establecer relaciones de tareas.
  • Alto nivel de escalabilidad debido a la posibilidad de ejecución paralela de runners.
  • Facilidad para agregar tareas.
  • Resolución de conflictos sencilla.
  • Sistema de seguridad confiable.

▍Debilidades de GitLab CI/CD

  • Para cada tarea, debe describir y cargar/descargar artefactos.
  • No puede probar los resultados de fusionar ramas antes de que realmente se fusionen.
  • Al describir las etapas de la tubería de CI / CD, aún no es posible destacar etapas individuales en ellas.

resultados

Tanto Jenkins como GitLab CI/CD tienen fortalezas y debilidades. La respuesta a la pregunta de qué elegir depende de las necesidades y características de un proyecto en particular. Cada una de las herramientas de CI/CD revisadas hoy tiene ciertas características, aunque estas herramientas fueron creadas para resolver el mismo problema. Al mismo tiempo, Jenkins es una herramienta independiente y GitLab CI/CD es parte de una plataforma diseñada para colaborar en el código.

Al elegir un sistema CI / CD, además de sus capacidades, vale la pena tener en cuenta los costos que pueden estar asociados con él y con qué están acostumbrados a trabajar exactamente los ingenieros de DevOps que respaldan el proyecto.

¿Qué herramientas de CI/CD utiliza?

Batalla de Jenkins y GitLab CI/CD

Batalla de Jenkins y GitLab CI/CD

Fuente: habr.com

Añadir un comentario