How to cache maven repository between builds?
- Assuming that your Nexus is local, I would look into why there are poor download rates from that, as using something like Nexus and Artifactory locally is currently the easiest way to do caching. They will manage the lifetime of your cached dependencies, so that you don't have dependencies being cached longer that they are needed and new dependencies are adding as they are used.
- If you want to share a cache between tasks of a job, then
output
the cached dependencies folder (.m2
folder for maven) of a task and use that as aninput
of another task. For reference, see following example:
---
jobs:
- name: create-and-consume
public: true
plan:
- task: make-a-file
config:
platform: linux
run:
# ...
outputs:
# ensure that relative .m2 folder is used: https://stackoverflow.com/a/16649787/5088458
- name: .m2
- task: consume-the-file
config:
platform: linux
inputs:
- name: .m2
run:
# ...
- If you want to share a cache between all executions of a single task in a job, tasks can also be configured to cache folders.
- If you want to cached between jobs then you could:
- build a docker image with the cached folder, but then you'll need to manage that when dependencies are updated, although that may be possible via another pipeline.
- create a resource that manages the cache for you. For example look at gradle-cache-resource or npm-cache-resource, although they require that the input is from git-resource.
I think Concourse CI does cache docker images used for tasks, but can also have them as resources of your pipeline and then use the image
parameter of the task to pass that resource. You can see what is cached and for how long using the volumes
command of fly
.