1
0
Fork 0
No description
This repository has been archived on 2025-01-13. You can view files and clone it, but cannot push or open issues or pull requests.
Find a file
2021-02-23 20:11:55 +01:00
.gitlab-ci.yml Fix broken before_script section in cleanup_job 2021-01-24 18:39:40 +01:00
Dockerfile Update docker.io/gitlab/gitlab-runner Docker tag to v13.8.0 2021-01-23 04:37:11 +00:00
LICENSE Initial commit 2019-05-04 14:04:44 +02:00
README.md Extend README examples with instance type 2021-02-23 20:11:55 +01:00
renovate.json Automate version upgrades 2020-06-30 20:51:34 +02:00

GitLab Hetzner Runner

This project extends the official gitlab runner image with the Hetzner docker-machine plugin by Jonas Stoehr, so it can run the CI processes on Hetzner Cloud instances.

Setup Runner

First of all you have to run the image using docker or podman. This example will use docker-compose:

# docker-compose.yml
version: '2'
services:
  hetzner-runner:
    image: quay.io/shivering-isles/gitlab-hetzner-runner:latest
    mem_limit: 128mb
    memswap_limit: 256mb
    volumes:
      - "./hetzner_config:/etc/gitlab-runner"
      - "./hetzner_machine:/root/.docker/machine"
    restart: always

Run the regular registration process but replace the 1st and the 6th (Runner executor) with the following:

For the 1st step run:

docker-compose run --rm hetzner-runner register

For the 6th step (Runner executor):

Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
 docker+machine

Configure Hetzner

With the basic runner setup, it's time to configure docker-machine to work with Hetzner.

Login to the Hetzner Cloud Console and create a new project (even when you already have existing projects, running your CI in an own project helps with isolating possible security issues when the API key gets compromised).

Within the new project, obtain an API token from Hetzner.

Now modify your config.toml that appeared in ./hetzner_config with the following fields:

# config.toml
[[runners]]
  executor = "docker+machine"
  [runners.docker]
    privileged = true
    volumes = ["/cache"]
  [runners.machine]
    MachineDriver = "hetzner"
    MachineName = "machine-%s-gitlab-runner-2gb"
    MachineOptions = [
       "hetzner-server-type=cx21",
       "hetzner-api-token=<HETZNER API TOKEN>",
       "hetzner-image=ubuntu-18.04"
    ]

The result should look similar to this:

# config.toml
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "hetzner-runner"
  limit = 1
  url = "https://gitlab.com/"
  token = "<RUNNERS GITLAB TOKEN>"
  executor = "docker+machine"
  [runners.docker]
    image = "docker:stable"
    privileged = true
    volumes = ["/cache"]
  [runners.machine]
    IdleCount = 0
    IdleTime = 1800
    MaxBuilds = 200
    MachineDriver = "hetzner"
    MachineName = "machine-%s-gitlab-runner-2gb"
    MachineOptions = [
       "hetzner-server-type=cx21",
       "hetzner-api-token=<HETZNER API TOKEN>",
       "hetzner-image=ubuntu-18.04"
    ]

Finally you can run docker-compose up -d and your gitlab runner should be ready to use! 😄

Development

If you want to modify the image or build it yourself:

git clone https://git.shivering-isles.com/shivering-isles/gitlab-hetzner-runner.git
cd gitlab-hetzner-runner
# Do you modifications
# ...
docker build -t "gitlab-hetzner-runner:latest" .

If you want to contribute to this image directly, free free to sign up on the SI GitLab instance and request access to the project.

Issues

Feel free to report issues to the issue tracker.