i have an angular app adn i have wrote a pipline for it like this :
image: node:16.13.2
variables:
DOCKER_HOST: myurl
GIT_STRATEGY: clone
TAG_LATEST: latest
TAG_COMMIT: $CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA
.login_into_nexus: &login_into_nexus
- echo "Login Into Nexus...."
- docker login -u $NEXUS_USERNAME -p $NEXUS_PASS $NEXUS_URL
services:
- docker:dind
stages:
- build
install-dependency:
stage: .pre
script:
- npm i --prefer-offline # install dependencies
cache:
key: "{$CI_JOB_NAME}"
paths:
- node_modules
policy: pull-push
artifacts:
paths:
- node_modules/
build:
stage: build
needs:
- job: install-dependency
artifacts: true
script:
- npm run build:aot
rules:
- if: '$CI_PIPELINE_SOURCE == "push"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_PIPELINE_SOURCE != "push" && $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_REF_NAME == "master"'
- if: '$CI_PIPELINE_SOURCE != "push" && $CI_PIPELINE_SOURCE != "merge_request_event" && $CI_COMMIT_REF_NAME == "develop"'
config.toml:
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "runner-global-1"
output_limit = 10000000
url = "myurl"
token = "QmeDZw6u2Qa48n6asVHE"
executor = "docker"
cache_dir = "/tmp/build-cache"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "alpine"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/tmp/build-cache:/cache:rw"]
shm_size = 0
[[runners]]
name = "runner-global-2"
output_limit = 10000000
url = "myurl"
token = "YYaXwQfLZ-2zSL8eHMGP"
executor = "docker"
cache_dir = "/tmp/build-cache"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "alpine"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/tmp/build-cache:/cache:rw"]
shm_size = 0
[[runners]]
name = "runner-global-3"
output_limit = 10000000
url = "myurl"
token = "-EUSye1c7h7tQyEk2VfH"
executor = "docker"
cache_dir = "/tmp/build-cache"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "alpine"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/tmp/build-cache:/cache:rw"]
shm_size = 0
[[runners]]
name = "runner-global-4"
output_limit = 10000000
url = "myurl"
token = "S7gPu3r2xVzc2CTZzy7z"
executor = "docker"
cache_dir = "/tmp/build-cache"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "ruby:2.6"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/tmp/build-cache:/cache:rw"]
shm_size = 0
[[runners]]
name = "runner-global-6"
output_limit = 10000000
url = "myurl"
token = "U_VQCMkj_AN5AfVuWyCR"
executor = "docker"
cache_dir = "/tmp/build-cache"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "ruby:2.6"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/tmp/build-cache:/cache:rw"]
shm_size = 0
as seen above the pipeline downloads node modules from my nexus and installs it in the install-dependency job
i also have 5 runners on this project and each one of them can pick the job . but each runner saves the cache for itself and when i run the pipeline on another branch it wont use the saved cache on the other branch
my gitlab version is : 13.3.5-ee
You must enable distributed caching in order for all your runners to share the same cache. Otherwise, the default is that the cache is local to the runner.