Los procesos CI/CD no aparecen por arte de magia desde el aire (como a veces nos gustaría). Para eso existen herramientas potentes que se encargan de todo el trabajo "sucio": la automatización de compilaciones, pruebas y despliegues. Hoy veremos cómo funcionan las herramientas más populares de CI/CD: Jenkins, GitLab CI y CircleCI. Además de estudiar sus capacidades, veremos cómo elegir la herramienta adecuada para vuestros proyectos.
Jenkins: el dinosaurio de la automatización que aún está en juego
Jenkins —es una herramienta open-source de automatización que se puede personalizar literalmente para cualquier necesidad. Si Jenkins fuera un superhéroe, su mantra sería "Yo estuve aquí antes que nadie". Jenkins apareció allá por 2005 con el nombre Hudson y a lo largo de los años se ha ganado el amor y el odio de los desarrolladores. Es potente, flexible, pero requiere paciencia y atención.
Esto es lo que puede hacer:
- Creación de jobs: tareas separadas que realizan compilación, pruebas y despliegue.
- Pipelines: posibilidad de componer secuencias complejas de tareas. Jenkins soporta pipelines declarativos y scripted.
- Gestión de dependencias: integración con herramientas como Maven, Gradle, Docker.
- Flexibilidad: más de 1500 plugins (sí, nosotros también nos sorprendimos) para conectar Jenkins con lo que quieras — SCM (por ejemplo, Git), nubes (AWS, Azure), sistemas de monitorización (Prometheus).
Ejemplo de pipeline en Jenkins
pipeline {
agent any
stages {
stage('Compilación') {
steps {
sh 'mvn clean package'
}
}
stage('Pruebas') {
steps {
sh 'mvn test'
}
}
stage('Despliegue') {
steps {
sh 'echo "Deploying to Production!"'
}
}
}
}
Jenkins es ideal para proyectos donde se necesita una enorme personalización o para empresas que llevan tiempo usando esta herramienta. Pero preparaos para invertir tiempo en configuración y en aprender a manejar muchos plugins.
GitLab CI: automatización directamente desde tu repositorio
Si usas GitLab, seguro que conoces su sistema CI/CD integrado. GitLab CI permite automatizar fácilmente todo, desde escribir código hasta desplegarlo, sin necesidad de instalar herramientas separadas.
Características de GitLab CI
- Integración: GitLab CI es parte de GitLab. No necesitas montar un servidor aparte, como con Jenkins.
- Uso de YAML: los pipelines se crean con archivos YAML (
.gitlab-ci.yml) que se guardan en el repositorio. - Runners automáticos: GitLab ofrece sus runners (máquinas virtuales) para ejecutar pipelines. También puedes usar runners propios.
- Contenerización: soporte para Docker listo para usar.
Ejemplo de .gitlab-ci.yml
stages:
- build
- test
- deploy
build:
stage: build
script:
- mvn clean package
test:
stage: test
script:
- mvn test
deploy:
stage: deploy
script:
- echo "Deploying application..."
GitLab CI encaja perfecto en proyectos ya alojados en GitLab. Si tenéis un equipo pequeño o queréis poner en marcha CI/CD rápido y sin complicaciones, es una gran opción.
CircleCI: el maestro CI/CD en la nube
CircleCI —es un servicio en la nube para automatización, que apuesta por la simplicidad y la integración con Docker y GitHub. Es menos de "flexibilidad como Jenkins" y más de "ligereza como una pluma".
Características de CircleCI
- Nube: no hace falta mantener servidores, todo funciona en la nube.
- Soporte Docker: CircleCI funciona genial con contenedores, puedes aislar el entorno en un par de líneas.
- Configuración vía YAML: como en GitLab CI, los pipelines se configuran en YAML.
- Integración con GitHub: CircleCI hace muy buena pareja con GitHub y se sincroniza con facilidad.
Ejemplo de .circleci/config.yml
version: 2.1
jobs:
build:
docker:
- image: circleci/openjdk:11-jdk
steps:
- checkout
- run:
name: Build with Maven
command: mvn clean package
test:
docker:
- image: circleci/openjdk:11-jdk
steps:
- checkout
- run:
name: Run Tests
command: mvn test
workflows:
version: 2
build-and-test:
jobs:
- build
- test
Si quieres empezar rápido con CI/CD y usas GitHub, CircleCI puede ser una excelente opción. Especialmente para proyectos desarrollados con contenedores.
Comparación entre Jenkins, GitLab CI y CircleCI
| Característica | Jenkins | GitLab CI | CircleCI |
|---|---|---|---|
| Instalación | Local | Integrado en GitLab | En la nube (SaaS) |
| Facilidad de uso | Media (muchas configuraciones) | Alta (integración con Git) | Alta (plantillas listas) |
| Rendimiento | Depende de la configuración | Rápido | Rápido |
| Precio | Gratis | Gratis/Pago | Gratis/Pago |
| Soporte Docker | A través de plugins | "Listo para usar" | "Listo para usar" |
| Flexibilidad | Muy alta | Media | Media |
¿Cómo elegir la herramienta para CI/CD?
La elección depende de vuestras necesidades:
- Si estáis en una empresa grande y necesitáis una herramienta super-flexible, elegid Jenkins.
- Si ya usáis GitLab y queréis implantar CI/CD rápidamente — GitLab CI es vuestra opción.
- Si vuestro proyecto está en la nube y valoráis la simplicidad de configuración — probad CircleCI.
Por cierto, nada impide combinar herramientas. Por ejemplo, usar Jenkins para pipelines complejos y GitLab CI para checks rápidos en ramas.
GO TO FULL VERSION