Hoy vamos a ver cómo podemos desplegar automáticamente en una máquina remota usando Jenkins y Gitlab.
Lo primero que tenemos que hacer es instalar Jenkins en una máquina. Aquí explicamos cómo puedes instalarlo en Ubuntu: https://devcodelight.com/wp-admin/post.php?post=3250
Ahora instalamos el plugin «GitLab Plugin» en Jenkins:
Administrar Jenkins > Administrar Plugins
Pulsamos en Avaiable plugins:
Y buscamos GitLab Plugin:
Con esto permitimos que GitLab permita activar Jobs de Jenkins. Pulsamos en Install without restart
Ahora configuramos la conexión entre Jenkins y GitLab.
Una vez que se complete la instalación, haz clic en «Manage Jenkins» en el menú lateral y luego en «Configure System».
Desplázate hacia abajo hasta la sección «GitLab» y configura los detalles de la conexión entre Jenkins y GitLab, como la URL de GitLab, el ID de cliente y el secreto de cliente.
Si utilizamos Gitlab.com ponemos este host:
Ahora creamos las credenciales:
Para generar las credenciales y el secreto de cliente en GitLab, sigue estos pasos:
Vamos a nuestra cuenta de Gitlab y pulsamos en Tokens de acceso:
Creamos el token con los siguientes campos:
Podemos añadir más Scopes si los necesitamos:
Y nos creará el token:
Ahora pulsamos en Add para añadir el Token de acceso a Gitlab.
Elegimos Gitlab API Token:
Añadimos los datos necesarios:
Añadimos el token que hemos generado arriba, el ID (nuestra cuenta de gitlab) y una descripción (opcional).
Ahora lo seleccionamos en API Token for accessing Gitlab
Y pulsamos en test connection, debería aparecer success
Pulsamos en aplicar y guardar:
Una vez que hayas completado estos pasos, Jenkins estará configurado para interactuar con GitLab y recibir notificaciones de eventos. Esto es esencial para que puedas configurar el webhook en GitLab y desencadenar el despliegue del proyecto cada vez que se realice un push en GitLab.
Ahora vamos a instalar el plugin SSH Agent Plugin, que nos permitirá poder conectar por SSH a una máquina remota.
Ahora creamos un nuevo Job en Jenkins:
Para ello primero vamos a «New item» o nueva tarea:
Proporciona un nombre para el job y selecciona «Freestyle project» (Proyecto sin restricciones) como tipo de proyecto. Luego haz clic en «OK».
Vamos a general y elegimos Gitlab connection:
En la sección «Source Code Management» (Gestión de código fuente):
Selecciona Git como el tipo de repositorio y proporciona la URL de tu repositorio de GitLab. También deberás proporcionar las credenciales de GitLab que creaste anteriormente (el token de acceso personal y el ID de usuario).
Ahora añadiremos las credenciales de Gitlab pulsando en Add.
Completamos username y password y damos en guardar.
Podemos elegir la rama que queremos desplegar:
En la sección «Build Triggers» (Disparadores de ejecuiones), selecciona «Build when a change is pushed to GitLab» (Construir cuando se realiza un PUSH a GitLab).
En este caso seleccionamos Push Events y Accepted Merge Request Events.
Ahora vamos a entorno de ejecución y seleccionamos SSH Agent
Elegimos add y en Kind SSH Username with private key:
Añadimos username y la key:
Ahora vamos a build steps y seleccionamos línea de comandos:
Aquí podemos añadir el comando ssh para conectarse remotamente a la máquina.
ssh -o StrictHostKeyChecking=no usuario@host "cd rutaDesplegar && git pull"
Recuerda que para que funcione correctamente este pull, primero tienes que haber configurado clave RSA y repositorio SSH en Gitlab.
Además de añadir el remote:
git remote set-url origin git@gitlab.com:grupo/proyecto.git
Una vez realizados todos los pasos, vamos a Gitlab, abrimos el proyecto y seleccionamos Configuración > Integraciones.
Buscamos Jenkins:
Añadimos la URL de nuestro servidor Jenkins desplegado. Y seleccionamos eventos PUSH.
Se añade el nombre del proyecto Jenkins creado (nombre de finalización de la URL)
Añadimos el username y password de Jenkins:
Y pulsamos en Test.
Y ya tenemos una integración continua que une Gitlab con Jenkins y una máquina remota.
Si queremos hacer la integración con un webhook tendremos que hacer lo siguiente:
- Ir a Gitlab y elegimos el proyecto, vamos a configuracion > webhooks
- Ahora vamos a Jenkins y activamos la opción:
- Pulsamos en Avanzado y generamos Secret Token:
Lo copiamos y volvemos a gitlab.
Ahora lo añadimos dentro de Token secreto:
En URL ponemos la URL del job.
jenkins../project/nombre_proyecto
Y pulsamos en guardar.
Ahora podemos pulsar en test y si todo va bien, devuelve un 200.
Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.