Skip to content

Fix cache dir detection for docker-windows executor on register

Summary

When user runs gitlab-runner register --docker-volumes 'c:\\cache:c:\\Users\\ContainerAdministrator'

Steps to reproduce

  1. gitlab-runner register --docker-volumes 'c:\\cache:c:\\Users\\ContainerAdministrator\\cache'
  2. Choose docker-windows as an exector

Actual Config

[[runners]]
  name = "windows-2019"
  url = "xxxxx"
  token = "xxxxx"
  executor = "docker-windows"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["c:\\cache:c:\\Users\\ContainerAdministrator\\cache"]
    shm_size = 0
    helper_image = "gitlab/gitlab-runner-helper:x86_64-latest"
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

Expected Config

[[runners]]
  name = "windows-2019"
  url = "xxxxx"
  token = "xxxxx"
  executor = "docker-windows"
  [runners.custom_build_dir]
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["c:\\cache:c:\\Users\\ContainerAdministrator\\cache", "c:\\cache"]
    shm_size = 0
    helper_image = "gitlab/gitlab-runner-helper:x86_64-latest"
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

Details

For context please read !1391 (merged), specifically !1391 (comment 177199179). This is because we are not parsing the user specified volumes with src/dst like Linux but doing a simple string match.

We need to figure out a way to parse the user volume same as we do inside of docker but without exposing anything from the docker package.

Edited by Steve Xuereb