GitLab Runners : installation et configuration 25 min de lecture

Executors et configuration avancee

Executors disponibles

  • Shell — Execute les scripts directement sur la machine hote
  • Docker — Execute dans des conteneurs Docker (le plus utilise)
  • Docker Machine — Autoscaling avec Docker Machine
  • Kubernetes — Execute dans des Pods Kubernetes
  • SSH — Execute sur une machine distante via SSH

Configuration Docker executor

# /etc/gitlab-runner/config.toml
[[runners]]
  name = "docker-runner"
  url = "https://gitlab.example.com/"
  token = "TOKEN"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]
    shm_size = 0
    allowed_images = ["ruby:*", "python:*", "node:*"]
    pull_policy = ["if-not-present"]

Configuration Kubernetes executor

[[runners]]
  name = "k8s-runner"
  url = "https://gitlab.example.com/"
  token = "TOKEN"
  executor = "kubernetes"
  [runners.kubernetes]
    namespace = "gitlab-ci"
    image = "alpine:latest"
    cpu_request = "500m"
    memory_request = "256Mi"
    cpu_limit = "1"
    memory_limit = "1Gi"
    service_cpu_request = "100m"
    service_memory_request = "128Mi"
    [runners.kubernetes.node_selector]
      workload = "ci"

Autoscaling avec Docker Machine

[[runners]]
  executor = "docker+machine"
  [runners.machine]
    IdleCount = 1
    IdleTime = 600
    MaxBuilds = 100
    MachineDriver = "amazonec2"
    MachineName = "gitlab-ci-%s"
    MachineOptions = [
      "amazonec2-instance-type=t3.medium",
      "amazonec2-region=eu-west-1",
      "amazonec2-vpc-id=vpc-xxxxx"
    ]
    [[runners.machine.autoscaling]]
      Periods = ["* * 9-17 * * mon-fri *"]
      IdleCount = 5
      IdleTime = 600
    [[runners.machine.autoscaling]]
      Periods = ["* * * * * sat,sun *"]
      IdleCount = 0
      IdleTime = 60
Securite : Evitez privileged = true sauf si Docker-in-Docker est indispensable. Preferez kaniko pour builder des images.