Klar, kosteneffektiv ist das wahrscheinlich nicht (oder vielleicht doch), aber ich hatte noch nen ungenutzten Netcup-Server und ich habe gerade meine Freiminuten auf dem shared_runner aufgebraucht.. Also warum nicht nen eigenen Runner installieren? Eigentlich relativ einfach, aber ein zwei Issues musste ich lösen. Daher hier eine Kurzzusammenfassung:
- Im Projekt / Gruppe auf Settings => CI/CD => Runners gehen.
- Mit der Anleitung unter “Show runner installations” den runner auf dem Server installieren. Ggf. zuvor git, und docker installieren. Docker (https://docs.docker.com/engine/install/debian/). Und docker ohne sudo ausführbar machen (https://docs.docker.com/engine/install/linux-postinstall/) und noch besser rootless ausführbar machen (https://docs.docker.com/engine/security/rootless/)
- Bei der Registrierung den Token nehmen, der im “Specific runners” Tab steht (nicht etwa einen Access Token). Docker executor auswählen und als Standard-Image “docker:stable”
- “Shared runners” ggf. ausstellen.
- Issue 1: Final die config.toml unter /etc/gitlab-runner/config.toml anpassen. Dazu in den root user wechseln. Eine valide Version sieht so aus:
concurrent = 1 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "my-runner" url = "https://gitlab.com/" id = XXXXX token = "YYYY" token_obtained_at = 2022-10-20T15:28:13Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "docker:stable" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"] shm_size = 0
- Am wichtigsten ist hier unter volumes “/var/run/docker.sock:/var/run/docker.sock” hinzuzufügen. Das ist nötig, damit der docker container, der in gitlab-runner ausgeführt wird den host docker daemon, also den auf der Maschine selbst, erreichen kann. Ohne diese Zeile versucht der container in gitlab-runner den host unter der Standard-URL http://docker:2375 zu finden. Diese kann dann via DNS nicht aufgelöst werden und daher kann man dann einen Fehler bekommen der in etwa so aussieht: “error during connect: Post http://docker:2375/v1.40/auth: dial tcp: lookup docker on 46.38.252.230:53: no such host”, wobei ‘46.38.252.230:53’ der Kontaktierte DNS-Server ist.
- Issue 2: Am Schluss ist noch einmal ein Personal Access Token zu erstellen und damit einmal initial die Verbindung vom Server zu registry.gitlab.com herzustellen. Unter Profile => Edit Profil => Personl Access Token, einen neuen Token mit Lese- und Schreibrechten auf der registry erstellen (die letzten beiden Haken). Dann auf der Maschine, auf der der gitlab-runner installiert wurde folgenden Befehl ausführen: docker login registry.gitlab.com. Dann denn gitlab user angeben und als Passwort den eben erstellten Access Token.
- Weiteres: Auf dem Server (in meinem Fall eine Linux-Maschine) am besten mindestens UFW installieren und SSH, HTTP und HTTPS erlauben. Z.B. mit dieser Anleitung.