Este proyecto configura un cluster de Jenkins con un master, dos agentes y un servidor Nginx, todo ello usando Docker Compose.
- Jenkins Master con soporte para Node.js y npm
- 2 Jenkins Agents con soporte SSH, Java 17 y Node.js
- Servidor Nginx con SSH configurado para despliegues
- Docker
- Docker Compose
- Git
- Bash (para ejecutar el script de configuración)
-
Clonar el repositorio:
git clone https://github.com/Cloud-DevOps-Labs/jenkins-playground-base cd jenkins-playground-base
-
Ejecutar el script de configuración (genera las claves SSH):
chmod +x setup.sh ./setup.sh
-
Construir las imágenes:
docker compose build
-
Iniciar los servicios:
# en segundo plano docker compose up -d # En primer plano, deberemos abrir un segundo terminal para lanzar el resto de comandos docker compose up
Para ver los logs:
docker compose logs -f
- Acceder a Jenkins en:
http://localhost:8080
- Obtener la contraseña inicial:
docker exec jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword
- Ir a "Manage Jenkins" > "Manage Credentials"
- Click en "(global)" bajo "Stores scoped to Jenkins"
- Click en "Add Credentials"
- Configurar la credencial de los agentes de jenkins:
- Kind: "SSH Username with private key"
- ID:
jenkins-agent-key
- Description:
Jenkins Agent SSH Key
- Username:
jenkins
- Private Key: Enter directly y pegar el contenido de
jenkins-master/ssh/jenkins_agent_key
- Click "Create"
- Configurar la credencial del servidor web NGINX:
- Kind: "SSH Username with private key"
- ID:
webserver-key
- Description:
Nginx Web Server SSH Key
- Username:
root
- Private Key: Enter directly y pegar el contenido de
jenkins-master/ssh/nginx_key
- Click "Create"
- Ir a "Manage Jenkins" > "Manage Nodes and Clouds"
- Click en "New Node"
- Configurar:
- Node name:
jenkins-agent1
- Type: "Permanent Agent"
- Click "Create"
- Node name:
- Configuración del nodo:
- Remote root directory:
/home/jenkins/agent
- Labels:
jenkins-agent
- Launch method: "Launch agents via SSH"
- Host:
jenkins-agent1
- Credentials: Seleccionar la credencial SSH creada anteriormente
- Host Key Verification Strategy: "Non verifying Verification Strategy"
- Click "Save"
- Remote root directory:
- Repetir el mismo proceso que para jenkins-agent1, pero usando:
- Node name:
jenkins-agent2
- Host:
jenkins-agent2
- El resto de la configuración igual que jenkins-agent1
- Node name:
-
En Jenkins, crear un nuevo Pipeline:
- Click en "New Item"
- Nombre:
playground-app
- Seleccionar "Pipeline"
- Click "OK"
-
En la configuración del pipeline:
- En la sección "Pipeline", seleccionar "Pipeline script from SCM"
- SCM: Git
- Repository URL:
https://github.com/Cloud-DevOps-Labs/jenkins-playground-app.git
- Branch Specifier:
*/main
- Script Path:
Jenkinsfile
- Click "Save"
En una pestaña del navegador accedemos a localhost:80 y veremos la página por defecto de nginx.
- Ir al proyecto
playground-app
- Click en "Build Now"
El pipeline:
- Clonará el repositorio
- Instalará las dependencias de Node.js
- Construirá la aplicación
- Ejecutará pruebas básicas
- Desplegará en el servidor Nginx
Una vez finalizado el despliegue podremos ver un hola mundo con la fecha actual.
Para verificar que los agentes están funcionando:
- Los agentes deberían aparecer como "online" en el dashboard de nodos
- Puedes probar la conexión SSH manualmente:
docker exec jenkins-master ssh -i /var/jenkins_home/.ssh/jenkins_agent_key jenkins@jenkins-agent1 docker exec jenkins-master ssh -i /var/jenkins_home/.ssh/jenkins_agent_key jenkins@jenkins-agent2
Si hay problemas al compilar con Node.js:
- Verificar que Node.js y npm están instalados en los agentes:
docker exec jenkins-agent1 node --version docker exec jenkins-agent1 npm --version
- Verificar que el plugin de Node.js está instalado en Jenkins y configurado correctamente
- Verificar que Nginx está corriendo:
docker exec nginx-web nginx -t docker exec nginx-web service nginx status
- Verificar los permisos de las claves SSH para el despliegue:
docker exec nginx-web ls -la /root/.ssh
Si existen problemas para borrar las credenciales del directorio de nginx, es debido a que el directorio se ha traspasado al usuario root. Con este comando se pueden restaurar antes de borrar:
sudo chown -R $USER:$USER $(pwd)/nginx/ssh
Para detener los servicios:
docker compose down
Para limpiar todo el entorno:
chmod +x clean.sh
sudo ./clean.sh --all
Nota:
El uso de sudo en el script de limpiado es necesario para el manejo de las claves ssh del contenedor de nginx. Para evitarlo se puede cambiar el owner del directorio: nginx/ssh y luego lanzar el script sin permisos.
- Las claves SSH generadas son solo para desarrollo local
- Para producción, se recomienda:
- Generar nuevas claves con parámetros más seguros
- Implementar una estrategia de rotación de claves
- Usar un gestor de secretos
- Configurar firewalls y reglas de red más restrictivas