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.