Crear un Pipeline de Jenkins para autodespliegue (CI/CD) con Gitlab.

Tiempo de lectura: 6 minutos

Hoy vamos a ver cómo podemos crear un archivo Jenkinsfile que permita autodesplegar un proyecto Gitlab en una máquina remota.

Seguimos los pasos anteriores:

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:

Ahora creamos una nueva tarea:

De tipo pipeline:

Elegimos la conexión Gitlab

En tipo de pipeline elegimos SCM

Elegimos Build Triggers «Build when a change is pushed to GitLab. Gitlab webhook URL»:

Elegimos los eventos que queramos que activen el pipeline:

Seleccionamos Git y rellenamos los datos solicitados:

Elegimos también la rama o ramas que queremos que activen este pipeline:

Y el PATH del script a ejecutar:

Y añadimos este pipeline a nuestro proyecto

pipeline {
    agent any
    environment {
        SSH_KEY = credentials('nombre-de-la-clave-ssh')
    }
    stages {
        stage('Deploy') {
            steps {
                sshagent(['nombre-de-la-clave-ssh']) {
                    sh "ssh -o StrictHostKeyChecking=no -i $SSH_KEY usuario@ip_maquina 'cd /ruta/al/proyecto && git pull'"
                }
            }
        }
    }
}

Para rellenar nombre-de-la-clave-ssh vamos a Credentials y utilizamos el ID de la clave SSH creada anteriormente con SSH-agent (tiene un aspecto : 33ef87316-35defa-we36-aee57-96d40c31dff3)

Para configurar una clave SSH en Jenkins, sigue estos pasos:

  1. Ve a la página principal de Jenkins y haz clic en «Credenciales» en el menú de la izquierda.
  2. En la página de credenciales, haz clic en «Global» en el menú de la izquierda, luego en «Añadir credenciales» en el menú de la izquierda.
  3. En el tipo de credencial, selecciona «SSH Username with private key» y haz clic en «OK».
  4. En la siguiente pantalla, introduce el «ID» y el «Username» que desees usar para la conexión SSH. A continuación, selecciona «Enter directly» en «Private Key» y pega la clave SSH privada en el campo de texto.
  5. Haz clic en «Guardar» y la credencial de SSH se habrá creado en Jenkins.

Una vez que se ha creado la credencial, puedes utilizarla en tu Jenkinsfile para ejecutar comandos SSH en la máquina de destino usando la clave SSH privada correspondiente. En el ejemplo anterior, la línea SSH_KEY = credentials('nombre-de-la-clave-ssh') hace referencia a la credencial recién creada, especificando el nombre que se introdujo en el campo «ID» durante la configuración de la credencial.

Ahora creamos el webhook en gitlab, para ello pulsamos en Integraciones y seleccionamos Jenkins.

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.

Si queremos hacer la integración con un webhook, hacemos 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.

Ya tenemos un pipeline que despliega nuestro proyecto automáticamente en otra máquina. Podemos usarlo de base para realizar test o despliegues necesarios.

Para filtar la rama que queremos que ejecute el Pipeline, tendremos que ir a la configuración del job pipeline y buscar Build Triggers, pulsar en Avanzado.

Podemos filtrar las ramas que permitimos ejecutar el pipeline:

Podemos indicar que solo despliegue desde cuando se haga un PUSH a dev:

Deja un comentario