Archivo config.toml

Por: Artiko
gitlabrunnersconfiguracionconfig.toml

Archivo config.toml

El archivo config.toml es el corazon de la configuracion del runner. Se ubica en:

Estructura basica

concurrent = 4
check_interval = 3
log_level = "info"
log_format = "text"

[[runners]]
  name = "mi-runner"
  url = "https://gitlab.com/"
  token = "glrt-xxxxxxxxxxxx"
  executor = "docker"

  [runners.docker]
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    volumes = ["/cache"]

Configuracion global

# Jobs simultaneos (todos los runners combinados)
concurrent = 4

# Intervalo de polling en segundos (minimo 3)
check_interval = 3

# Nivel de log: debug, info, warn, error, fatal, panic
log_level = "info"

Tip: concurrent aplica a nivel global. Si tienes 2 runners con limit = 3 cada uno y concurrent = 4, solo se ejecutaran 4 jobs simultaneos en total.

Configuracion por runner

[[runners]]
  name = "docker-runner"
  limit = 2              # Max jobs para ESTE runner
  output_limit = 4096    # KB max de log por job
  request_concurrency = 1 # Requests simultaneos a GitLab

Configuracion Docker

[runners.docker]
  image = "node:20-alpine"        # Imagen por defecto
  privileged = false               # No dar acceso root al host
  pull_policy = ["if-not-present"] # always, never, if-not-present

  # Volumenes persistentes
  volumes = [
    "/cache",
    "/var/run/docker.sock:/var/run/docker.sock"
  ]

  # Limites de recursos
  memory = "2g"
  cpus = "1.5"

  # DNS personalizado
  dns = ["8.8.8.8", "1.1.1.1"]

  # Redes
  network_mode = "bridge"

  # Limpiar contenedores e imagenes
  disable_cache = false

  # Allowed images (seguridad)
  allowed_images = ["node:*", "python:*", "alpine:*"]

Configuracion de Cache

[runners.cache]
  Type = "s3"
  Shared = true

  [runners.cache.s3]
    ServerAddress = "s3.amazonaws.com"
    BucketName = "mi-cache-ci"
    BucketLocation = "us-east-1"
    AccessKey = "AKIAXXXXXXXXXX"
    SecretKey = "xxxxxxxxxxxxx"

Ejemplo completo para produccion

concurrent = 8
check_interval = 3
log_level = "warning"

[[runners]]
  name = "prod-docker-runner"
  url = "https://gitlab.company.com/"
  token = "glrt-xxxxxxxxxxxx"
  executor = "docker"
  limit = 4
  output_limit = 8192

  [runners.docker]
    image = "alpine:3.19"
    privileged = false
    pull_policy = ["if-not-present"]
    volumes = ["/cache", "/builds:/builds:rw"]
    memory = "4g"
    cpus = "2"
    shm_size = 268435456
    allowed_images = ["node:*", "python:*", "golang:*", "docker:*", "alpine:*"]
    allowed_services = ["docker:*-dind", "postgres:*", "redis:*"]

  [runners.cache]
    Type = "s3"
    Shared = true
    [runners.cache.s3]
      BucketName = "ci-cache"

Recargar configuracion

# El runner recarga automaticamente al detectar cambios
# O manualmente:
sudo gitlab-runner restart

Siguiente: Capitulo 5: Tags, Scopes y Seguridad →