My goal is to be able to build, package and test a java project that is built with maven using a councourse build pipeline.
The setup as such is in place, and everything runs fine, but build times are much too long due to poor maven download rates from our nexus.
My build job yml file uses the following resource as base for the maven build:
# ...
image_resource:
type: docker-image
source:
repository: maven
tag: '3.3-jdk-8'
# ...
I am aware of the fact that having a "blank slate" for every buils is somwhat built into concourse by design.
Now my question is: what would be a good way to cache a local maven repository (say, with at least some basic stuff inside like Spring and it's dependencies)?
Following options come to my mind:
As far as I can see, option 1) will not make the download size for the build smaller, as concourse seems to not cache docker images used as base for the build jobs (or am I wrong here?)
Before I move on, I would like to make sure that following option 2) gives me any advantage - does concourse cache docker images used as ressources?
I might miss out something, as I am relatively new to councourse. So forgive me if I force you to state the obvious here. :)
output
the cached dependencies folder (.m2
folder for maven) of a task and use that as an input
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:
# ...
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
.