22

I'm using gitlab-ci-multi-runner with docker containers. Everything is going fine, but docker containers don't keep the composer cache so in every run composer downloads dependencies again and again, which takes a lot of time. Is there any way to configure gitlab-ci-runner docker container to keep the composer cache or mount a volume on each run where the composer cache is kept?

BrokenBinary
  • 7,731
  • 3
  • 43
  • 54
Arman P.
  • 4,314
  • 2
  • 29
  • 47

2 Answers2

37

You can change the composer cache path by exporting the COMPOSER_CACHE_DIR environment variable in your runner configuration file, and then add a volume in the [runners.docker] section to match it.

If you run gitlab-runner as root or with sudo, then your configuration file is located at /etc/gitlab-runner/config.toml. Otherwise it's located at $HOME/.gitlab-runner/config.toml.

# config.toml

[[runners]]
  name = "Generic Docker Runner"
  ...
  environment = ["COMPOSER_CACHE_DIR=/cache"]
  executor = "docker"
  [runners.docker]
    ...
    volumes = ["/var/cache:/cache:rw"]
    cache_dir = "/cache"
BrokenBinary
  • 7,731
  • 3
  • 43
  • 54
  • 1
    Works a treat, thanks! Seeing these packages downloading again and again was getting really irritating. – PJP Aug 10 '17 at 13:57
8

You could modify the composer cache path and write the stuff to a docker volume.

That storage is persistent and can be shared across containers.

Referencing:

BrokenBinary
  • 7,731
  • 3
  • 43
  • 54
Jens A. Koch
  • 39,862
  • 13
  • 113
  • 141