Despliegue automatizado con Jenkins
Cree una canalización de CI/CD en Jenkins para desplegar sus contenedores de Docker en un entorno de destino.
Despliegue automatizado con Jenkins es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.
Introducción al despliegue automatizado
¡Bienvenido a la lección final sobre CI/CD con Jenkins y Docker! Hoy nos centraremos en automatizar el despliegue de sus contenedores de Docker.
El despliegue automatizado es el proceso de publicar software en entornos de producción o de staging sin intervención manual. Es una parte fundamental de la Entrega y el Despliegue Continuos, ya que garantiza rapidez, coherencia y fiabilidad.

¿Por qué automatizar el despliegue?
Desplegar aplicaciones manualmente puede ser lento, propenso a errores e incoherente. La automatización aborda estos problemas:
- Rapidez: Despliegue rápidamente nuevas funciones o correcciones.
- Fiabilidad: Reduzca los errores humanos mediante procesos estandarizados.
- Coherencia: Asegúrese de que cada despliegue siga los mismos pasos.
- Eficiencia: Permita que los desarrolladores se concentren en programar y no en las tareas de despliegue.
Etapas del pipeline de despliegue
Un pipeline de Jenkins habitual para el despliegue con Docker incluye varias etapas clave:
- Build: Compilar la imagen de Docker (se ha explicado en lecciones anteriores).
- Test: Ejecutar pruebas automatizadas en la imagen.
- Push: Enviar la imagen a un registro de Docker.
- Deploy: Extraer la imagen del registro y ejecutarla en un servidor de destino.
- Verify: Confirmar que el nuevo despliegue funciona correctamente.
Hoy nos centraremos en las etapas «Deploy» y «Verify».
Configuración del entorno de destino
Antes de que Jenkins pueda realizar el despliegue, el servidor de destino debe estar preparado. Esto normalmente significa lo siguiente:
- Docker instalado: El servidor de destino debe tener instalado Docker Engine.
- Acceso SSH: Jenkins necesita acceso seguro mediante Shell (SSH) al servidor de destino.
- Permisos de usuario: El usuario de SSH necesita permisos para ejecutar comandos de Docker.
Normalmente gestionamos las credenciales de SSH de forma segura dentro de Jenkins.
Credenciales de Jenkins para SSH
Para conectarse a un servidor remoto, Jenkins utiliza credenciales de SSH. Normalmente, se trata de pares de nombre de usuario y clave privada de SSH almacenados de forma segura en el gestor de credenciales de Jenkins.
Al definir un pipeline, puede indicar a Jenkins que utilice estas credenciales en etapas específicas, lo que le permitirá ejecutar comandos en el servidor de destino.
Ejemplo de script básico de despliegue
A continuación se muestra un script de shell sencillo que podría ejecutarse en un servidor de destino para actualizar un contenedor de Docker. Detiene el contenedor antiguo, lo elimina, extrae la imagen nueva y la ejecuta.
APP_NAME y IMAGE_NAME se proporcionarían como variables de entorno.
#!/bin/bash
# Stop and remove existing container
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
# Pull the new Docker image
docker pull ${IMAGE_NAME}
# Run the new container
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment of ${APP_NAME} complete!"Integración con Jenkins Pipeline
En un Jenkinsfile, puede utilizar el plugin sshPublisher o un paso sh sencillo con el reenvío del agente SSH para ejecutar comandos en un host remoto. Así podría verse una etapa de despliegue mediante un paso sh básico, suponiendo que SSH esté configurado.
agent { label 'remote-deploy-host' } significa que esta etapa se ejecuta en el servidor de destino.
stage('Deploy to Production') {
agent { label 'remote-deploy-host' }
steps {
withEnv([
"APP_NAME=my-webapp",
"IMAGE_NAME=myregistry/my-webapp:latest"
]) {
sh '''
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
docker pull ${IMAGE_NAME}
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
echo "Deployment successful!"
'''
}
}
}Implementación de actualizaciones progresivas
Para realizar despliegues sin tiempo de inactividad, no basta con detener y volver a iniciar. Normalmente se utiliza una estrategia como una de las siguientes:
- Actualización progresiva: Reemplazar gradualmente los contenedores antiguos por los nuevos, uno a uno, para garantizar la disponibilidad del servicio.
- Despliegue azul/verde: Desplegar la nueva versión (verde) junto a la antigua (azul) y, después, cambiar el tráfico.
Aunque Jenkins puede orquestar estas estrategias, herramientas como Docker Swarm o Kubernetes ofrecen compatibilidad nativa con estrategias más avanzadas.
Verificación del despliegue
Después del despliegue, es fundamental verificar que la aplicación se esté ejecutando correctamente. Esto puede incluir:
- Comprobaciones de estado: Solicitudes HTTP GET sencillas al endpoint de estado de la aplicación.
- Supervisión de registros: Comprobar si hay errores en los registros del contenedor.
- Pruebas de integración: Ejecutar un conjunto breve de pruebas contra la versión recién desplegada.
Su pipeline de Jenkins puede incluir una etapa «Verify» para automatizar estas comprobaciones.
Compruebe sus conocimientos
Considere el siguiente fragmento de Jenkinsfile correspondiente a una etapa de despliegue. ¿Cuál es la finalidad principal de docker stop ${APP_NAME} || true?
Repaso: despliegue automatizado
¡Excelente trabajo! Ha aprendido a abordar el despliegue automatizado con Jenkins y Docker.
- El despliegue automatizado garantiza publicaciones rápidas, fiables y coherentes.
- Los entornos de destino necesitan Docker y acceso SSH.
- Jenkins utiliza credenciales seguras para conectarse a servidores remotos.
- Los scripts de despliegue suelen detener los contenedores antiguos, extraer las imágenes nuevas e iniciar los contenedores nuevos.
- Los pasos de verificación son fundamentales para confirmar que el despliegue se ha realizado correctamente.
Con esto finaliza nuestro curso de CI/CD con Jenkins y Docker. ¡Siga practicando para dominar estas potentes herramientas!
Preguntas frecuentes
¿La lección «Despliegue automatizado con Jenkins» es gratis?
Sí — el texto completo de «Despliegue automatizado con Jenkins» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué aprenderé en «Despliegue automatizado con Jenkins»?
Cree una canalización de CI/CD en Jenkins para desplegar sus contenedores de Docker en un entorno de destino. Practicas DevOps Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar DevOps Bootcamp?
No se requiere experiencia previa. DevOps Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Despliegue automatizado con Jenkins»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de DevOps Bootcamp?
Sí. Cada lección de DevOps Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Introducción a Jenkins
- Creación de imágenes de Docker con Jenkins
- Despliegue automatizado con Jenkins
- Pipeline as Code de Jenkins con Jenkinsfile