Implementar Gitlab CI/CD para desplegar en un servidor

Tiempo de lectura: 5 minutos

Hoy os voy a enseñar cómo podéis autodesplegar vuestro proyecto en una máquina remota haciendo pull a una rama llamada main_release usando Gitlab CI/CD.

Generar clave RSA para conexión SSH

Lo primero que vamos a hacer es crear una clave RSA para permitir acceder a la máquina remota usando SSH.

Para crear una clave privada SSH en Ubuntu, puedes seguir los siguientes pasos:

  1. Abre una terminal en Ubuntu.
  2. Ejecuta el siguiente comando para generar la clave SSH:
ssh-keygen -t rsa -b 4096
  1. El comando anterior creará la clave privada y pública en el directorio predeterminado ~/.ssh/. Puedes especificar una ruta y un nombre de archivo diferente si lo deseas.
  2. Cuando se te solicite, ingresa una contraseña para proteger tu clave privada.
  3. La clave pública se guardará en el archivo ~/.ssh/id_rsa.pub. Puedes verla ejecutando el siguiente comando:
cat ~/.ssh/id_rsa.pub
  1. Copia la clave pública y pégala en la configuración de tu cuenta de GitLab o en el archivo authorized_keys en la máquina remota donde deseas conectarte mediante SSH.
  2. Ahora puedes utilizar la clave privada para conectarte a la máquina remota mediante SSH.
    Por ejemplo, para conectarte a la máquina remota con la dirección IP 192.168.0.1, utiliza el siguiente comando:
ssh user@192.168.0.1 -i ~/.ssh/id_rsa

Reemplaza user con el nombre de usuario para conectarse a la máquina remota.

Para usar la clave SSH para iniciar sesión en Ubuntu, sigue los siguientes pasos:

  1. Copia tu clave privada SSH (archivo id_rsa) en tu máquina local. Si no la tienes en tu máquina local, puedes copiarla desde la máquina remota utilizando scp:
scp user@remote_host:~/.ssh/id_rsa ~/path/to/local/directory/

Reemplaza user con tu nombre de usuario en la máquina remota y remote_host con la dirección IP o el nombre de dominio de la máquina remota.

  1. En tu máquina local, abre una terminal y ejecuta el siguiente comando para cambiar los permisos de la clave privada:
chmod 600 ~/path/to/local/directory/id_rsa
  1. Luego, para iniciar sesión en la máquina remota, ejecuta el siguiente comando en la terminal de tu máquina local:
ssh user@remote_host -i ~/path/to/local/directory/id_rsa

Reemplaza user con tu nombre de usuario en la máquina remota y remote_host con la dirección IP o el nombre de dominio de la máquina remota.

  1. Si se te solicita, ingresa la contraseña de la clave privada que estableciste al crear la clave SSH.

Una vez que hayas iniciado sesión correctamente en la máquina remota utilizando la clave SSH, podrás ejecutar comandos y realizar otras tareas en la máquina remota desde tu máquina local.

Ahora vamos a generar el fichero de Gitlab CI/CD que tendrá el funcionamiento de autodesplegar el proyecto en la máquina que indiquemos. Además se conectará por ssh con la clave que hemos creado anteriormente y hará un PULL en el directorio que indiquemos (para ello necesitamos crear una clave RSA de nuevo y asignarla a GITLAB).

Gitlab CI / CD

Para generar un archivo .gitlab-ci.yml que despliegue automáticamente tu código en una máquina remota cada vez que hagas un pull request a la rama principal (main_release), puedes seguir los siguientes pasos:

  1. Abre tu proyecto en GitLab y haz clic en el botón Settings en la barra lateral izquierda.
  2. Selecciona la opción CI/CD en el menú desplegable y luego haz clic en Variables.
  1. Agrega una variable llamada SSH_PRIVATE_KEY y copia la clave privada de SSH que te permitirá conectarte a la máquina remota.
  • Haz clic en el botón Add variable para guardar la variable.
  • Crea un archivo .gitlab-ci.yml en la raíz de tu proyecto

Pega el siguiente código:

image: docker:latest

services:
  - docker:dind

stages:
  - deploy

deploy:
  stage: deploy
  only:
    - main_release
  script:
    - apk add --no-cache openssh-client
    - eval $(ssh-agent -s)
    - ssh-add <(echo "$SSH_PRIVATE_KEY")
    - ssh -o StrictHostKeyChecking=no ageinglab@vps130.cesvima.upm.es "cd html/mgbiomed/ && git remote set-url origin git@gitlab.com:<usuario-proyecto>/<nombre-proyecto>.git && git pull"
  • Reemplaza /path/to/project con la ruta a tu proyecto en la máquina remota y /path/to/deploy con la ruta donde deseas que se despliegue el código. Recuerda que primero debes tener el código ya desplegado en tu máquina.
  • Reemplaza user@server con el usuario y la dirección IP de la máquina remota.
  • Reemplaza git@gitlab.com:<usuario-proyecto>/<nombre-proyecto>.git por el que aparezca en el repositorio de tu Gitlab dentro de clone (el que pone SSH):
  • Guarda el archivo .gitlab-ci.yml y haz un push a tu repositorio.
  • Cada vez que hagas un pull request a la rama main_release, GitLab ejecutará automáticamente el job deploy que desplegará el código en la máquina remota.

Clave RSA para generar PULL remoto en Gitlab

Para poder hacer un PULL remoto, necesitamos una clave RSA de GITLAB. Para generarla hacemos lo siguiente:

Ir a tu usuario y seleccionar Claves SSH

  1. Genera una clave RSA local:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Esto generará una clave privada y una clave pública en la ruta especificada.

  1. Agrega la clave pública en GitLab:
  • Copia el contenido de la clave pública (cat ~/.ssh/id_rsa.pub) a tu portapapeles.
  • Abre GitLab y navega a tu perfil > configuraciones > claves SSH.
  • Haz clic en «Agregar clave SSH».
  • Dale un nombre a la clave (por ejemplo, «Mi clave SSH de GitLab»).
  • Pega el contenido de la clave pública en el campo «clave».
  • Haz clic en «Agregar clave».
  1. Agrega la clave privada en tu máquina local:
  • Copia la clave privada (cat ~/.ssh/id_rsa) a un archivo local (por ejemplo, gitlab_rsa).
  • Asigna permisos restringidos a la clave privada (chmod 400 gitlab_rsa) para evitar que otros usuarios puedan leerla.
  • Agrega la clave privada a tu agente SSH (ssh-add gitlab_rsa).

Si el comando ssh-add no ha funcionado puedes utilizar este comando:

sudo ssh-agent sh -c 'ssh-add .ssh/gitlab_rsa'

Ahora deberías poder hacer pull sin ingresar el nombre de usuario y la contraseña cada vez.

Para asignar al repositorio GIT que funcione por clave SSH, tienes que poner el siguiente comando (lo incluyo en el Pipeline, pero puedes hacerlo a mano y omitirlo).

git remote set-url origin git@gitlab.com:<usuario-proyecto>/<nombre-proyecto>.git

Si la clave no funciona, podemos renombrarla a ./.ssh/id_rsa

Si la clave funciona con root, debemos copiar la clave al directorio /root/.ssh/id_rsa

Indicando los datos del apartado clone.

Ahora, cada vez que hagamos un PULL a la rama que se ha indicado, aparecerá un Pipeline y podremos ver ele estado de la tarea.

Podremos ver si se han ejecutado correctamente o donde han fallado.



Deja un comentario