DEV Community

Jean-Phi Baconnais for Zenika

Posted on Edited on Originally published at jeanphi-baconnais.gitlab.io

Installation d'un GitLab Runner sur un raspberry PI en 10 minutes

❓ Un runner ?

L'intÃĐgration continue de GitLab, plus connue sous le nom de GitLab CI fonctionne avec des runners qui exÃĐcutent les pipelines que vous dÃĐcrivez dans vos projets. Sur gitlab.com, GitLab met à disposition des runners avec cependant une limitation en termes d'utilisation voir ici.

Les runners, dÃĐveloppÃĐs en Go, peuvent Être installÃĐs sur n'importe quelle structure que ce soit sur le cloud ou chez vous de façon à avoir totalement la main sur leurs configurations.

ðŸĪ·â€â™‚ïļ Pourquoi un Raspberry PI ?

Depuis quelques annÃĐes, j'ai un projet perso sur GitLab qui me sert de "cobaye", dans le sens oÃđ il subit mes diffÃĐrentes tentatives de manipulation de langages, framework ou divers outils sur des cas d'utilisation sortant du contexte d'un simple "hello world". Et le raspberry est une solution simple et pas chÃĻre pour pouvoir tester cela.

AprÃĻs avoir achetÃĐ un raspberry pour y installer de la domotique, me voilà parti dans l'achat d'un autre raspberry oÃđ j'ai pu dÃĐployer k3s, une distribution Kubernetes trÃĻs lÃĐgÃĻre et adaptÃĐe aux machines ayant peu de mÃĐmoire. Pour une infrastructure ARM telle un raspberry, c’est l’idÃĐal. Lorsque j'ai voulu gÃĐnÃĐrer mon application pour cette structure ARM, j'ai sollicitÃĐ fortement les runners jusqu'à arriver à recevoir des alertes sur la consommation ÃĐlevÃĐe de runners GitLab.

Alors pourquoi pas essayer tout simplement d'installer mon propre runner sur un raspberry ?

🏠 Mon raspberry PI

Je suis parti sur l'achat de la derniÃĻre version de raspberry, un Raspberry Pi 4 ModÃĻle B 8 Go Kit avec une carte SD de 64 Go disponible à 135,99 euros sur Amazon.

Mon PI

AprÃĻs avoir installÃĐ la derniÃĻre version de Debian (la carte SD ÃĐtait dÃĐjà configurÃĐe, dans le cas contraire vous pouvez aller sur ce site pour avoir la procÃĐdure à suivre), l'installation du runner GitLab peut Être effectuÃĐe.

🚀 Installation du runner

L'installation se fait rapidement aprÃĻs avoir tÃĐlÃĐchargÃĐ le bon package armhf

curl -L0 debian gitlab-runner-armhf https://s3.amazonaws.com/gitlab-runner-downloads/master/deb/gitlab-runner_armhf.deb
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

puis exÃĐcuter le fichier d'installation (aprÃĻs avoir donnÃĐ les droits suffisant) :

sudo apt install -y gitlab-runner-armhf
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

A partir de là, la commande gitlab-runner est disponible :

CI lint - error

ðŸģ Installation de docker

Comme je me base sur un exÃĐcuteur docker, j'ai ÃĐgalement dÃŧ installer docker sur mon raspberry, ce qui se fait rapidement avec ces commandes :

sudo apt-get update && sudo apt-get upgrade
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker pi
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

Pour que la modification soit prise en compte, vous devez recharger le shell ou vous dÃĐconnecter/reconnecter à votre raspberry. La bonne installation de docker peut se vÃĐrifier en rÃĐcupÃĐrant la version via la commande docker version et en exÃĐcutant une image , par exemple hello-world via cette commande docker pull hello-world qui doit renvoyer cela :

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm32v7)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

Cette image est souvent citÃĐe pour vÃĐrifier son environnement, qu'il soit sous Windows, Linux, Mac ou ARM. Cette image est multi-plateformes et cela peut se vÃĐrifier sur le Docker Hub ou avec la commande

docker inspect hello-world

.

pi@raspberrypi:~ $ docker inspect hello-world | grep 'Architecture'
        "Architecture": "arm",
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

ðŸ’ū L'enregistrement du runner

Une fois le gitlab-runner crÃĐÃĐ, un lien entre votre runner et un projet GitLab existant est nÃĐcessaire. Pour cela,
il suffit de lancer la commande

sudo gitlab-runner register
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

L'exÃĐcutable vous proposera de saisir :

  • l'url de votre instance GitLab
  • le token de votre projet, disponible dans Settings > CI/CD > Runners oÃđ vous pouvez trouver le token d'enregistrement

CI use our runner

  • un tag associÃĐ Ã  votre runner
  • un exÃĐcuteur oÃđ il est courant d'utiliser docker. Dans ce cas l'image par dÃĐfaut pour exÃĐcuter votre CI vous sera demandÃĐe.

📝 Plus de docs sur le site de GitLab : Doc GitLab

⚙ïļ La configuration de votre runner

Pour que votre CI utilise votre runner, vos scripts de CI doivent Être modifiÃĐs pour indiquer le nom du tag de votre runner :

stages:
  - build

my-job:
  stage: build
  tags: ["runner-pi"] # le tag associÃĐ Ã  votre runner dÃĐfini lors de l'enregistrement de votre runner
  image:
    name: golang:alpine
  script:
    - go mod download
    - go get -d -v
    - GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main .
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

Pour vÃĐrifier que votre pipeline a bien utilisÃĐ votre runner, il est possible de voir sur un job le runner utilisÃĐ :

CI use our runner

🊛 Customisation du runner

Le fichier config.toml

La configuration du gitlab-runner est stockÃĐe dans le fichier /etc/gitlab-runner/config.toml. Par dÃĐfaut le nombre de job exÃĐcutÃĐ en parallÃĻle est de 1. Vous pouvez modifier cette valeur dans la premiÃĻre ligne du fichier et passer la variable concurrent à 4 par exemple.

Le swap

Une autre dÃĐcouverte (merci Guillaume), c'est autour du swap du raspberry. Cet espace de mÃĐmoire est de base initiÃĐ Ã  100MB et il est prÃĐconisÃĐ par GitLab de monter à 4GB de swap. A prendre avec prÃĐcaution car une forte charge du swap peut tout simplement ruiner votre carte SD.

En tout cas, pour faire l'upgrade de votre swap, il suffit de :

  • arrÊter votre swap : sudo dphys-swapfile swapoff
  • ouvrir le fichier de configuration du swap : sudo vi /etc/dphys-swapfil
  • modifier la valeur du paramÃĻtre swap : CONF_SWAPFILE avec la valeur que vous dÃĐsirez en MB (je suis restÃĐ Ã  2048 MB).
  • dÃĐmarrer le swap : sudo dphys-swapfile swapon

Kaniko

Kaniko
Dans mes pipelines GitLabCI, j'utilise habituellement l'outil Kaniko pour builder et pusher mes images dans un registry.

Sur Raspberry, l'exÃĐcution d'image Kaniko n'est pas possible malgrÃĐ la prise en compte d'image taggÃĐe arm. A l'heure oÃđ j'ÃĐcris cet article, trois issues ÃĐvoquent ce problÃĻme :

Pour pallier à cela, je me suis basÃĐ sur les commandes Docker :

   - docker login -u gitlab-ci-token -p $CI_SECRET registry.gitlab.com 
   - docker build -t registry.gitlab.com/<le nom de votre image>:$CI_COMMIT_BRANCH -f $CI_PROJECT_DIR/Dockerfile .
   - docker push registry.gitlab.com/<le nom de votre image>:$CI_COMMIT_BRANCH
ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™ ðŸ”ī Hot News: zenika/installation d un gitlab runner sur un raspberry pi en minutes o - āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļĢāđ‰āļ­āļ™

oÃđ :

  • $CI_SECRET est une variable dÃĐfinie dans les paramÃĻtres de votre projet (Settings > CI/CD > Variables).

📝 Edit : suite à des ÃĐchanges avec Philippe CharriÃĻre, Kaniko fonctionne correctement avec un raspberry PI basÃĐ sur une image Ubuntu.

Et voilà, votre runner GitLab est disponible sur votre raspberry et votre projet GitLab y est reliÃĐ, il ne reste plus qu'à vous amuser avec 🚀 💊.

Top comments (0)