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:
- Abre una terminal en Ubuntu.
- Ejecuta el siguiente comando para generar la clave SSH:
ssh-keygen -t rsa -b 4096
- 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. - Cuando se te solicite, ingresa una contraseña para proteger tu clave privada.
- La clave pública se guardará en el archivo
~/.ssh/id_rsa.pub
. Puedes verla ejecutando el siguiente comando:
cat ~/.ssh/id_rsa.pub
- 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. - 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 IP192.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:
- 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 utilizandoscp
:
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.
- 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
- 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.
- 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:
- Abre tu proyecto en GitLab y haz clic en el botón
Settings
en la barra lateral izquierda. - Selecciona la opción
CI/CD
en el menú desplegable y luego haz clic enVariables
.
- 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 jobdeploy
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
- 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.
- 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».
- 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.
Ingeniero en Informática, 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.