Ich möchte euch in diesem Artikel zeigen, wie ihr auf eurem Raspberry PI 4 einen Gitlab Runner installieren könnt. Das Ziel von diesem Gitlab Runner sind unbegrenzte Minuten für die CI/CD Pipeline. Mit einem kostenlosen Gitlab Account habt ihr im Monat 400 freie Minuten für die Pipeline verfügbar. Benötigt ihr mehr als 400 Pipeline Minuten müsst ihr entweder einen eigenen Runner registrieren oder ein anderes Paket bei Gitlab kaufen.
Komponenten
Für den Einbau in meinen 19 Zoll Serverschrank habe ich mir einen Rahmen für die PIs gegönnt.
Serverschrank: Digitus Netzwerk-Schrank 19 Zoll 9 HE
TL;DR
Installation Git
#Installation Git
sudo apt-get update -y && sudo apt-get install git -y
Installation Docker
#Aktualisieren der Plattform und vom Packaging Tool
sudo apt-get update -y && sudo apt-get upgrade
#Download Docker Script + Ausführen
sudo curl -sSL https://get.docker.com | sh
#pi Benutzer zur Docker Gruppe hinzufügen
sudo usermod -aG docker pi
#Docker Service zum Autostart hinzufügen
sudo systemctl enable docker
#Neustarten
sudo shutdown -r now
Installation Gitlab Runner 64-bit
#Download der Installationsdatei für den Gitlab Runner 64-bit
curl -O "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_arm64.deb"
#Installation
sudo dpkg -i gitlab-runner_arm64.deb
Installation Gitlab Runner ARMHF
#Download der Installationsdatei für den Gitlab Runner ARMHF
curl -O "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_armhf.deb"
#Installation
sudo dpkg -i gitlab-runner_armhf.deb
Gitlab Runner registrieren
sudo gitlab-runner register
Runtime platform arch=arm64 os=linux pid=3242 revision=febb2a09 version=15.0.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.com/
Enter the registration token:
GR1348941zA5qZAEUXXXXXXXXXX
Enter a description for the runner:
[gitlab-runner]:
Enter tags for the runner (comma-separated):
raspberry
Enter optional maintenance note for the runner:
Registering runner... succeeded runner=GR1348XXXXXXXXX
Enter an executor: parallels, shell, docker+machine, docker-ssh+machine, kubernetes, custom, docker, docker-ssh, ssh, virtualbox:
docker
Enter the default Docker image (for example, ruby:2.7):
alpine:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Voraussetzungen
Der Gitlab Runner in diesen Tutorial wird ein Docker Runner, dass heißt, der Runner wird mit Docker Containern arbeiten. Damit der Raspberry PI genügend Leistung für die Docker Umgebung und den Runner selbst hat wird mindestens ein Raspberry PI 4 mit 4Gb Arbeitsspeicher benötigt. Tests mit früheren oder leistungsschwächeren Raspberrys habe ich nicht gemacht. Für einen Shell Runner könnten auch geringere Ressourcen ausreichen.
Zum besseren Verständnis dieses Tutorials sind grundlegende Kenntnisse von Linux, Gitlab CI/CD Pipeline und Docker hilfreich, aber nicht zwingend Erforderlich.
Desweiteren benötigt ihr einen Gitlab Account in dem ihr euren Runner registrieren möchtet.
Installation Raspberry Pi OS Lite (64-bit)
Als Betriebssystem bevorzuge ich das Raspberry Pi OS Lite in der 64-bit Version. Die Installation habe ich mit dem Raspberry Pi Imager durchgeführt (Download hier). Dieses Tool gibt euch eine geführte Installation an die Hand. Euch stehen verschiedene Images zur Auswahl und der Pi lässt sich mit grundlegenden Einstellungen, wie Hostname, SSH , Anmeldeinformationen und WLAN Einstellungen vorkonfigurieren.
Das OS Lite 64-bit findet ihr unter Raspberry Pi OS (other) -> Raspberry Pi OS Lite (64-bit). Die Konfiguration des Images öffnet ihr im Hauptmenü mit dem Zahnrad.



Installation der Software
Installation von Git
Damit der Gitlab Runner funktioniert muss eine Version von Git installiert werden.
#Installation Git
sudo apt-get update -y && sudo apt-get install git -y
Mit Abfrage der Git Version könnt ihr überprüfen, ob die Installation korrekt durchgelaufen ist.
#Git Version
git --version
Ergebnis sollte so oder ähnlich aussehen:
pi@gitlab-runner:~ git --version
git version 2.30.2
Installation von Docker
In der Einleitung habe ich schon angekündigt, dass wir uns in diesem Tutorial auf den Docker Executor vom Gitlab Runner konzentrieren. Um den Docker Executor zu nutzen muss auf dem Raspberry Docker installiert werden.
#Aktualisieren der Plattform und vom Packaging Tool
sudo apt-get update -y && sudo apt-get upgrade
#Download Docker Script + Ausführen
sudo curl -sSL https://get.docker.com | sh
#pi Benutzer zur Docker Gruppe hinzufügen
sudo usermod -aG docker pi
#Docker Service zum Autostart hinzufügen
sudo systemctl enable docker
#Neustarten
sudo shutdown -r now
Die Installation vom Docker ist durchgeführt. Zum Testen, ob alles korrekt läuft könnt ihr zum einen die Docker Version prüfen und zum anderen den Hello World Container starten.
#Version von Docker prüfen
docker --version
Ergebnis:
docker --version
Docker version 20.10.16, build aa7e414
Starten von Hello World
#Container Hello World starten
docker run hello-world
Ergebnis:
docker run hello-world
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.
(arm64v8)
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/
Installation vom Gitlab Runner
Die Installation des Gitlab Runners erfolgt mit einem heruntergeladenen Package. Habt ihr wie in diesem Artikel die 64-bit Version installiert nutzt bitte folgendes Script für die Installation.
#Download der Installationsdatei für den Gitlab Runner 64-bit
curl -O "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_arm64.deb"
#Installation
sudo dpkg -i gitlab-runner_arm64.deb
Habt ihr hingegen die normale Version vom Raspberry OS Lite installiert verwendet bitte dieses Script.
#Download der Installationsdatei für den Gitlab Runner ARMHF
curl -O "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_armhf.deb"
#Installation
sudo dpkg -i gitlab-runner_armhf.deb
Ist die Installation ohne Fehlermeldung durchlaufen kannst du den Status des Gitlab Runners abfragen.
sudo gitlab-runner status
Runtime platform arch=arm64 os=linux pid=3186 revision=febb2a09 version=15.0.0
gitlab-runner: Service is running
Konfiguration des Gitlab Runners
Bevor wir mit der Registrierung des Gitlab Runners beginnen solltest du dir das Token deiner Gitlab Group besorgen. Besuche deine Gitlab Group und wähle in der Navigation CI/CD -> Runners.

Danach könnt ihr durch Klicken unter Register a group runner den Token kopieren. Diesen braucht ihr um den Runner in eurer Group zu registrieren.

Startet die Registrierung des Gitlab Runners.
#Starten der Registrierung
sudo gitlab-runner register
Als erstes werdet ihr nach der Gitlab instance URL gefragt. Tragt bitte
https://gitlab.com/
ein. Als nächstes werdet ihr nach dem Token gefragt. Fügt hier den kopierten Token eurer Gitlab Group ein. Die Beschreibung könnt ihr leer lassen und einfach bestätigen. Wählt im nächsten Schritt die Tags, die euer Gitlab Runner bekommen soll. Mit diesen Tags könnt ihr später in der Gitlab Pipeline definieren, ob dieser Runner genutzt werden soll oder nicht. Tragt als Beispiel den Tag raspberry ein. Die maintenance note könnt ihr ebenfalls leer lassen.
Das System sollte nun versuchen sich mit Gitlab zu verbinden und den Runner zu registrieren. Dies wird mit einem Registering runner… succeeded quittiert.
Der nächste Schritt fragt euch nach dem Typ des Executors. Tipps docker ein und bestätigt. Als letztes müsst ihr ein Standard Docker Image definieren. Ich wähle immer das alpine:latest aus.
Zusammenfassung:
sudo gitlab-runner register
Runtime platform arch=arm64 os=linux pid=3242 revision=febb2a09 version=15.0.0
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.com/
Enter the registration token:
GR1348941zA5qZAEUXXXXXXXXXX
Enter a description for the runner:
[gitlab-runner]:
Enter tags for the runner (comma-separated):
raspberry
Enter optional maintenance note for the runner:
Registering runner... succeeded runner=GR1348XXXXXXXXX
Enter an executor: parallels, shell, docker+machine, docker-ssh+machine, kubernetes, custom, docker, docker-ssh, ssh, virtualbox:
docker
Enter the default Docker image (for example, ruby:2.7):
alpine:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Auflisten eurer Gitlab Runner
sudo gitlab-runner list
Auf der Gitlab Webseite könnt ihr unter CI/CD -> Runners euren sehen.

Nutzung deines eigenen Gitlab Runners
Bezugnehmend auf meinen Artikel Tutorial – Wie du deine PHP Anwendung mit der Gitlab Pipeline deployst passen wir dieses Script ein wenig an, um mit unserem eigenen Gitlab Runner das Deployment vorzunehmen.
WICHTIG! Nicht alle Images sind mit dem Gitlab Runner kompatibel. Ihr müsst darauf achten, dass das Image die Plattform ARM unterstützt! Denn ARM ist die Plattform vom Raspberry!
Für das Script muss das Image ebenfalls angepasst werden, denn das Image mwienk/docker-lftp:latest läuft nur unter amd64 und nicht auf arm. Neu und wichtig für diesen Artikel ist Zeile 8+9. Wie angekündigt müsst ihr ein neues Attribut mit dem Wert eures gewählten Tags einfügen, damit die Pipeline versteht, deinen eigenen Gitlab Runner zu benutzen.
stages:
- deploy
deploy-job:
image: alpine:latest
stage: deploy
when: manual
tags:
- raspberry
script:
- apk add lftp
- lftp -e "set ftp:ssl-allow false; mirror --exclude .git/ --exclude .gitlab-ci.yml -eRnv . /; exit;" -u $FTP_USERNAME,$FTP_PASSWORD $FTP_HOST
Hilfreiche Links
- Liste Gitlab Runner Executors https://docs.gitlab.com/runner/executors
- Raspberry Pi Imager Download https://www.raspberrypi.com/software
- Gitlab Account erstellen https://gitlab.com/users/sign_up