Zum Inhalt springen

Runner einrichten

Das ist die Anleitung, nach der die Runner-VM dieser Plattform entstand. Du machst es auf deiner Server-VM als Project Runner für dein Projekt, damit du den Gruppen-Runner nicht brauchst.

Eine eigene VM für den Runner ist sauberer als die Webserver-VM, im Kurs darf es dieselbe sein. Anforderungen:

  • Ubuntu Server 24.04, 2 vCPU, 4 GB RAM, 40 GB Disk. Docker-Images und npm-Cache brauchen Platz.
  • Nur ausgehende Verbindungen: HTTPS zu GitLab und Docker Hub, SSH zum Deploy-Ziel. Eingehend nur SSH zur Verwaltung.
  • Automatische Sicherheitsupdates: sudo apt install unattended-upgrades.
  1. Docker aus den Ubuntu-Paketen:
    Runner-VM
    sudo apt update
    sudo apt install -y docker.io
    sudo systemctl enable --now docker
  2. Das Paket-Repository von GitLab einrichten. Das Skript lädst du zuerst herunter und liest es, bevor es mit sudo läuft:
    Runner-VM
    curl -fsSL -o /tmp/gitlab-runner-repo.sh https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh
    less /tmp/gitlab-runner-repo.sh
    sudo bash /tmp/gitlab-runner-repo.sh
    sudo apt install -y gitlab-runner
  3. Prüfen:
    Runner-VM
    sudo gitlab-runner status
    docker --version

Der Runner muss sich bei GitLab anmelden. Dafür erzeugst du in GitLab einen Runner-Eintrag und bekommst ein Token.

Settings → CI/CD → Runners → New project runner. «Run untagged jobs» anhaken, Description meine-vm, Create runner.

GitLab zeigt ein Token glrt-…, das nur einmal sichtbar ist. Damit auf der VM:

Runner-VM
sudo gitlab-runner register --url https://gitlab.ethz.ch --token glrt-XXXXXXXXXXXXXXXXXXXX

Der Assistent fragt nach Name (meine-vm), Executor (docker) und Standard-Image (alpine:latest). Das Standard-Image gilt nur für Jobs ohne eigenes image.

Runner-VM
sudo gitlab-runner verify
sudo gitlab-runner list

In GitLab erscheint der Runner mit grünem Punkt. Jetzt die hängende Pipeline deines Projekts auf Retry setzen. Der erste Lauf zieht die Images und dauert ein paar Minuten, danach läuft eine Pipeline dieser Plattform in rund zwei Minuten.

Alles, was der Assistent gefragt hat, steht in /etc/gitlab-runner/config.toml:

/etc/gitlab-runner/config.toml
concurrent = 1
[[runners]]
name = "meine-vm"
url = "https://gitlab.ethz.ch"
token = "glrt-…"
executor = "docker"
[runners.docker]
image = "alpine:latest"
privileged = false
volumes = ["/cache"]

concurrent ist die Zahl der Jobs, die gleichzeitig laufen dürfen. Mit 2 vCPU bleibt es bei 1. Nach Änderungen: sudo systemctl restart gitlab-runner. Das Token in dieser Datei ist das Geheimnis, mit dem sich der Runner ausweist, die Datei gehört root und bleibt so.

  • Logs: sudo journalctl -u gitlab-runner -f.
  • Aufräumen: docker system prune -f entfernt alte Container und ungenutzte Images. Als monatlichen Timer einrichten, wie in Linux Grundlagen, Modul 9.
  • Updates: sudo apt update && sudo apt upgrade aktualisiert auch gitlab-runner, das Paket-Repository ist eingetragen.
  • Backup: Die VM ins Proxmox-Backup aufnehmen. Im Notfall ist ein Runner in zwanzig Minuten neu aufgesetzt, das Backup spart nur Zeit.
Lösung anzeigen

Wenn der Runner online ist, aber keine Jobs nimmt: «Run untagged jobs» vergessen. Ein Runner mit Tags nimmt nur Jobs, die dieselben Tags haben, und deine Jobs haben keine. In GitLab beim Runner nachträglich änderbar.

Selbstcheck · 3 Fragen

1. Was steht in config.toml und darf nicht ins Repository?
2. Der Runner ist online, Jobs bleiben pending. Häufigste Ursache?
3. Was bewirkt concurrent = 1?