Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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'"
}
}
}
}
}
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'" } } } } }
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:

0

Deja un comentario