Configurar GitLab Runner Desde 0
#Linux #Debian #VPS #Docker #Gitlab #CI
Mi tarea de esta tarde fue configurar un servidor VPS para ser usado como GitLab CI Runner. La idea de tener un runner de CI propio es no depender de los servidores compartidos, que en los momentos de mayor consumo esto puede significar esperas de hasta media hora entre un commit y el inicio del proceso de CI.
Bueno, a continuación el listado de pasos que seguí para dejar todo funcionando.
Configuración Inicial del VPS
El server que usé contaba con una instalación default de Debian 9 Stretch. Me conecté por primera vez al server, con los datos de login (usuario y contraseña, para el usuario root) provistos.
ssh root@server.ip
Creé un usuario tehuel
, con el que voy a ejecutar todos los demás procesos
adduser tehuel
Le dí permisos de SUDO a este nuevo usuario. Para esto usé el comando visudo
, y agregué una de las siguientes lineas:
tehuel ALL=(ALL:ALL) ALL
tehuel ALL=(ALL) NOPASSWD: ALL
La primera linea es para permitir ejecutar comandos con SUDO, la segunda permite ejecutar esos comandos sin que sea necesario ingresar una contraseña. Dejo constancia de las 2 posibilidades, pero yo agregué sólo una.
Deshabilitar ROOT login
Deshabilité el inicio de sesión del usuario root. Para esto modifiqué el archivo /etc/ssh/sshd_config
, y reemplacé:
#PermitRootLogin yes
PermitRootLogin no
Habilitar Key-Based login
Después habilité el inicio de sesión usando pares de claves publica y privada en lugar de usar password. Yo ya contaba con unas claves generadas en mi máquina local, así que lo que necesitaba era asociar esas claves a mi nuevo usuario en el servidor remoto. Para esto, en mi máquina local ejecuté
ssh-copy-id -i .ssh/tehuel.pub tehuel@server.ip
Donde .ssh/tehuel.pub
es la ruta (en mi maquina local) a la clave pública que decidí usar. Para terminar esto, me pide la contraseña del usuario, y si todo sale bien es la ultima vez que tengo que ingresar esa contraseña.
[Opcional] Instalación de Docker
Una opción para el runner de GitLab es correrlo usando Docker como executor. Para esto es que primero hay que instalar docker en el VPS donde va a funcionar todo.
La instalación de Docker ha hice siguiendo los pasos indicados en la documentación oficial.
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
sudo docker -v
Ejecutar docker sin usuario root
Tal como lo explican los ‘pasos a seguir después de la instalación en Linux’ de la documentación, lo primero que hay que hacer es permitir el uso de Docker para un usuario no root. Para esto recomiendan crear un nuevo grupo docker
(aunque en mi caso ese grupo ya había sido creado en la instalación) y agregar nuestro usuario a este grupo.
sudo groupadd docker
sudo usermod -aG docker $USER
Instalación de docker-compose
Otra vez la referencia es la documentación oficial, la guía de instalación de docker-compose en este caso.
Copié los comandos de Linux que están en la documentación, habiendo comprobado que la versión que se instalaba correspondía con la ultima release en Github
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Teniendo docker
y docker-compose
funcionando, ya pude continuar.
Instalación de gitlab-runner
Hay varias opciones para instalar gitlab-runner
. Dado que yo estoy usando Debian, y desde GitLab proveen un paquete oficial de instalación, fue el camino que decidí.
Referencia: La documentación oficial de instalación de gitlab-runner en linux.
Con el siguiente script agrego los repositorios de Gitlab, configuro las claves, y otras cosas más.
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
Hay una nota en la documentación indicando que tengo que pinnear la versión runner proveniente de GitLab para que tenga prioridad sobre la proveniente de los repos oficiales de Debian. Esto es debido a que la version de Debian en general está mas desactualizada.
No pude hacer andar el comando que indicaban en la nota, supongo que debido a problemas de copy-paste. Así que edito a mano el archivo.
sudo nano /etc/apt/preferences.d/pin-gitlab-runner.pref
Y dentro de ese archivo es que agrego el contenido:
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
Ahora si, con todos los preparativos listos, procedo finalmente a la instalación de gitlab-runner
sudo apt-get install gitlab-runner
Registro del nuevo gitlab-runner en GitLab
Una vez más, seguir la documentación Oficial.
Ejecuto el asistente de registro, que me va a ir pidiendo los datos necesarios para el registro.
sudo gitlab-runner register
Configuración del Usuario gitlab-runner
Posteriormente a la instalación del runner, decidí usarlo para tareas de deploy hacia otros servidores. Para esto necesitaba que el runner (shell en mi caso) ya cuente con las claves necesarias para la conexión a los servidores. Para esto es que decidí agregar las claves directamente al usuario gitlab-runner.
Adicionales
- Limpiar imagenes de docker: https://blog.matt.wf/gitlab-runner-clean-up-caches/
- Ejecutar jobs concurrentemente: https://www.codementor.io/@konstantinosdemiris/this-is-how-to-achieve-multiple-job-concurrency-with-gitlab-lcei4nw74
Pendientes
Creo que voy a tener que separa esto en varios posts distintos, para hacerlo menos confuso y menos extenso que lo que es actualmente.
Cargando Comentarios
Error
Hubo un error cargando los comentarios.
No hay comentarios
Podés ser el primero en dejar un comentario.
Agregar Comentario
Tu dirección de email no será publicada. Los comentarios son revisados de forma manual antes de ser aprobados y publicados.