Skip to content

Support nested env variables for GIT_CLONE_PATH

Summary

When a user-specified GIT_CLONE_PATH that has the value and has nested environment variables it's not expanded properly and the validation fails

Steps to reproduce

.gitlab-ci.yml
image: golang:1.12

variables:
    GOPATH: $CI_BUILDS_DIR/go
    GIT_CLONE_PATH: $GOPATH/src/gitlab-org/gitlab-runner

test:
  stage: test
  script:
  - echo $CI_BUILDS_DIR
  - echo $GOPATH
  - echo $GIT_CLONE_PATH
  - pwd
  - ls -la

Actual behavior

Running with gitlab-runner development version (HEAD)
  on docker yj3uiViT
ERROR: Job failed: the GIT_CLONE_PATH="$CI_BUILDS_DIR/go/src/gitlab-org/gitlab-runner" has to be within "/builds" <- Notice how $GOPATH got expanded but then `CI_BUILD_DIR` did not, for the [string match](https://gitlab.com/gitlab-org/gitlab-runner/blob/3cf5d6d569a99fb08dac469940cd6b47a99f8e24/common/build.go#L170-173)

Expected behavior

The build to clone to the correct path

Relevant logs and/or screenshots

job log
Running with gitlab-runner development version (HEAD)
  on docker yj3uiViT
ERROR: Job failed: the GIT_CLONE_PATH="$CI_BUILDS_DIR/go/src/gitlab-org/gitlab-runner" has to be within "/builds"

Environment description

config.toml contents
[[runners]]
  name = "docker"
  url = "xxxx"
  token = "xxxxx"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:3.9"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]
    Type = "s3"
    Path = "path/to/prefix"
    Shared = true
    [runners.cache.s3]
    [runners.cache.gcs]

Used GitLab Runner version

All GitLab Runner versions that support GIT_CLONE_PATH

Possible fixes

ERROR: Job failed: the GIT_CLONE_PATH="$CI_BUILDS_DIR/go/src/gitlab-org/gitlab-runner" has to be within "/builds" <- Notice how $GOPATH got expanded but then CI_BUILD_DIR did not, for the string match We need to make sure we fully expand it before continuing it.