Runner verstehen
Wer führt die Jobs aus
Abschnitt betitelt „Wer führt die Jobs aus“GitLab selbst führt keine Jobs aus. Es verwaltet nur die Warteschlange. Ein Runner ist ein kleines Programm (gitlab-runner) auf irgendeinem Rechner, das GitLab regelmässig fragt: «Hast du Arbeit für mich?» Bekommt es einen Job, führt es ihn aus und schickt Log und Ergebnis zurück.
sequenceDiagram
participant R as Runner (VM)
participant G as GitLab
participant D as Docker
R->>G: Gibt es einen Job?
G-->>R: Job «build», Image node:24-alpine
R->>D: Container starten, Repo klonen
D-->>R: Log, Exit-Code, Artefakte
R->>G: Ergebnis hochladen
Wichtig für die Firewall: Die Verbindung geht vom Runner zu GitLab, nie umgekehrt. Die Runner-VM braucht nur ausgehendes HTTPS, keinen offenen Port.
Drei Reichweiten
Abschnitt betitelt „Drei Reichweiten“| Art | Wer darf ihn nutzen | Wer legt ihn an |
|---|---|---|
| Shared Runner | Alle Projekte der GitLab-Instanz | Die Administratoren der Instanz |
| Group Runner | Alle Projekte einer Gruppe | Owner der Gruppe |
| Project Runner | Ein Projekt | Maintainer des Projekts |
Auf gitlab.ethz.ch gibt es keine Shared Runner. Darum hat die Kursgruppe einen Group Runner: einmal eingerichtet, läuft er für jedes Projekt in der Gruppe, auch für deines. Ein Project Runner hätte nur der Lernplattform geholfen.
Executor
Abschnitt betitelt „Executor“Der Runner kann Jobs auf verschiedene Arten ausführen, das ist der Executor:
- shell: direkt auf der VM, mit dem, was dort installiert ist. Einfach, aber jeder Job hinterlässt Spuren, und ein
rm -rfim Script trifft die VM. - docker: pro Job ein frischer Container aus dem
imagedes Jobs. Sauber, reproduzierbar, Standard. - kubernetes, virtualbox und andere für grössere Umgebungen.
Diese Plattform nutzt den Docker-Executor. Das ist der Grund, warum jeder Job ein image hat und warum apk add im Deploy-Job nötig ist: Der Container weiss nichts von der VM.
Was auf der VM landet
Abschnitt betitelt „Was auf der VM landet“Beim ersten Lauf einer Pipeline zieht Docker die Images: koalaman/shellcheck-alpine, node:24-alpine, alpine:3.21. Das dauert, danach sind sie lokal. Der npm-Cache aus Modul 6 liegt ebenfalls auf der Runner-VM. Darum braucht sie Plattenplatz, 40 GB sind komfortabel, und Docker sollte gelegentlich aufräumen (docker system prune).
Selbstcheck · 3 Fragen