Wie installiere ich einen Gitlab Runner auf meinem Raspberry PI 4

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.

Gitlab CI/CD Runners
Gitlab 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.

Kopieren des Gitlab Runner Tokens
Kopieren des Gitlab Runner Tokens

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.

Aktiver Gitlab Runner
Aktiver Gitlab Runner

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

Beitrage der gleichen Kategorie

Gitlab Pipeline passed

Dieses Tutorial wird dir zeigen, wie du in wenigen Schritten deine PHP Anwendung per SFTP auf deinen Server automatisch deployen kannst. Das wird dir helfen deine Entwicklung zu beschleunigen ohne die Kontrolle über das Deployment abzugeben. Für dieses Tutorial wird ein Gitlab Account benötigt. Solltest du noch keinen Gitlab Account besitzen kannst du diesen Link […]

0 Kommentare

Bitte tragt euren Namen ein.
Bitte tragt eure Email-Adresse ein.
Top