Einen eigenen gitlab-runner hosten

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.

 

Leave a Reply

Your email address will not be published. Required fields are marked *