Introducción
En este módulo, aprenderás cómo integrar Jenkins con Docker para mejorar la eficiencia y flexibilidad de tus pipelines de CI/CD. Docker permite empaquetar aplicaciones y sus dependencias en contenedores, lo que facilita la creación de entornos consistentes y reproducibles.
¿Por qué usar Docker con Jenkins?
- Aislamiento de Entornos: Docker permite ejecutar cada etapa de la pipeline en un contenedor aislado, evitando conflictos de dependencias.
- Portabilidad: Los contenedores Docker pueden ejecutarse en cualquier entorno que soporte Docker, lo que facilita la migración entre diferentes entornos de desarrollo, prueba y producción.
- Escalabilidad: Docker facilita la escalabilidad horizontal de Jenkins, permitiendo ejecutar múltiples agentes en contenedores.
Requisitos Previos
- Conocimientos básicos de Docker.
- Jenkins instalado y funcionando.
- Docker instalado en el servidor donde se ejecuta Jenkins.
Instalación del Plugin de Docker en Jenkins
- Accede a Jenkins: Inicia sesión en tu instancia de Jenkins.
- Navega a la Gestión de Plugins:
- Ve a "Administrar Jenkins" > "Administrar Plugins".
- Instala el Plugin de Docker:
- En la pestaña "Disponible", busca "Docker".
- Selecciona "CloudBees Docker Pipeline" y "Docker Commons Plugin".
- Haz clic en "Instalar sin reiniciar".
Configuración de Docker en Jenkins
-
Configura Docker en Jenkins:
- Ve a "Administrar Jenkins" > "Configurar el sistema".
- Desplázate hasta la sección "Cloud" y haz clic en "Agregar una nueva nube" > "Docker".
- Configura la URL del Docker Host (por ejemplo,
unix:///var/run/docker.sock
para un host local).
-
Configura un Agente Docker:
- En la misma sección, haz clic en "Agregar un nuevo template de Docker".
- Configura la imagen Docker que deseas usar (por ejemplo,
jenkinsci/jnlp-slave
). - Configura las opciones adicionales según tus necesidades (volúmenes, variables de entorno, etc.).
Creación de una Pipeline con Docker
Ejemplo de Jenkinsfile
pipeline { agent { docker { image 'maven:3.6.3-jdk-8' args '-v /root/.m2:/root/.m2' } } stages { stage('Build') { steps { sh 'mvn clean install' } } stage('Test') { steps { sh 'mvn test' } } } }
Explicación del Jenkinsfile
- agent: Define el agente Docker que se utilizará. En este caso, se usa la imagen
maven:3.6.3-jdk-8
. - args: Argumentos adicionales para el contenedor Docker. Aquí se monta el volumen
/root/.m2
para compartir la caché de Maven. - stages: Define las etapas de la pipeline.
- Build: Ejecuta el comando
mvn clean install
para compilar el proyecto. - Test: Ejecuta el comando
mvn test
para ejecutar las pruebas.
- Build: Ejecuta el comando
Ejercicio Práctico
Objetivo
Crear una pipeline en Jenkins que use Docker para compilar y probar una aplicación Java.
Pasos
- Configura Docker en Jenkins siguiendo los pasos anteriores.
- Crea un nuevo trabajo de pipeline en Jenkins.
- Copia el Jenkinsfile proporcionado en la sección anterior.
- Ejecuta la pipeline y verifica que las etapas se ejecutan correctamente en contenedores Docker.
Solución
pipeline { agent { docker { image 'maven:3.6.3-jdk-8' args '-v /root/.m2:/root/.m2' } } stages { stage('Build') { steps { sh 'mvn clean install' } } stage('Test') { steps { sh 'mvn test' } } } }
Errores Comunes y Soluciones
- Error de Permisos: Si encuentras errores relacionados con permisos al usar Docker, asegúrate de que el usuario de Jenkins tenga acceso al socket Docker (
/var/run/docker.sock
). - Problemas de Red: Si los contenedores Docker no pueden acceder a la red, verifica la configuración de red de Docker y asegúrate de que no haya restricciones de firewall.
Conclusión
Integrar Jenkins con Docker proporciona una forma poderosa y flexible de gestionar tus pipelines de CI/CD. Al usar contenedores, puedes garantizar entornos consistentes y reproducibles, mejorar la escalabilidad y simplificar la gestión de dependencias. En el próximo módulo, exploraremos cómo usar Jenkins con Kubernetes para llevar tus pipelines al siguiente nivel.
Jenkins: De Principiante a Avanzado
Módulo 1: Introducción a Jenkins
Módulo 2: Conceptos Básicos de Jenkins
- Visión General del Tablero de Jenkins
- Creación y Ejecución de Trabajos
- Entendiendo las Pipelines de Jenkins
- Usando Plugins de Jenkins
Módulo 3: Pipelines de Jenkins
- Pipeline como Código
- Pipelines Declarativas vs Scriptadas
- Creando una Pipeline Simple
- Sintaxis de Pipeline
Módulo 4: Pipelines Avanzadas de Jenkins
- Etapas y Pasos de Pipeline
- Ejecución Paralela en Pipelines
- Usando Variables de Entorno
- Mejores Prácticas de Pipeline
Módulo 5: Administración de Jenkins
- Gestionando Nodos de Jenkins
- Configurando Seguridad
- Respaldo y Restauración de Jenkins
- Monitoreando Jenkins
Módulo 6: Integrando Jenkins
- Integración con Sistemas de Control de Versiones
- Integración con Herramientas de Construcción
- Integración con Herramientas de Pruebas
- Integración con Herramientas de Despliegue
Módulo 7: Jenkins para Integración Continua y Entrega Continua (CI/CD)
- Entendiendo CI/CD
- Configurando una Pipeline de CI
- Configurando una Pipeline de CD
- Automatizando Despliegues
Módulo 8: Temas Avanzados de Jenkins
- Usando Jenkins con Docker
- Jenkins y Kubernetes
- Jenkins como Código con Jenkinsfile
- Escalando Jenkins