'Configure cache on GitLab runner
I don't manage to configure a cache directory, but somehow it does not work. I'm not even sure it takes the config.toml file.
my config.toml:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
cache_dir = /tmp/gitlab-runner-cache
... both on /etc/gitlab-runner/config.toml and in ~/.gitlab-runner/config.toml
my .gitlab-ci.yml:
image: docker:latest
services:
- docker:dind
cache:
key: "myCache"
paths:
- ${CI_PROJECT_DIR]/.m2/
variables:
DOCKER_DRIVER: overlay
MAVEN_OPTS: -Dmaven.repo.local=${CI_PROJECT_DIR}/.m2
stages:
- build
- acceptance
maven-build:
image: maven:3.3-jdk-8
stage: build
script: "mvn clean package"
artifacts:
paths:
- target/*.jar
maven-acceptance:
dependencies:
- maven-build
image: maven:3.3-jdk-8
stage: acceptance
script: "mvn verify"
When I try: gitlab-runner exec shell maven-build
I get the error:
ERROR: Could not create cache adapter error=cache factory not found: factory for cache adapter "" was not registered
The build is successful, but the .m2 repository is not cached...
Therefore, I have 2 questions:
- How to know if gitlab-runner actually takes my config.yml?
- What is a correct config for caching?
Thanks in advance!
Solution 1:[1]
I ran into the same issue just now. I am not sure which version of Gitlab you use, but version 12 supports either an S3-compatible storage or GCS as the cache provider (see thes docs), but no local cache folder like cache_dir = /tmp/gitlab-runner-cache
.
The issue I had was, that I forgot to add Type = "s3"
to the [runners.cache]
section of the Runner configuration:
[runners.cache]
Type = "s3"
Shared = true
[runners.cache.s3]
ServerAddress = ...
Solution 2:[2]
I had the same error ("cache factory not found") and the problem was that the value of cache_dir
was not included in the [runners.docker]
/ volumes
config.
The doc about cache_dir
says:
If the docker executor is used, this directory needs to be included in its volumes parameter.
After adding the path to volumes
the cache works without S3 or other distributed cache.
Here are the relevant parts of the working /etc/gitlab-runner/config.toml
:
[[runners]]
executor = "docker"
cache_dir = "/home/gitlab-runner/cache"
[runners.docker]
volumes = ["/cache", "/home/gitlab-runner/cache"]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Kevin Woblick |
Solution 2 | Michaël Witrant |