Desplegar automáticamente usando Gitlab y Jenkins CI/CD usando un JOB

Tiempo de lectura: 6 minutos

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.

Deja un comentario