如何在构建之间缓存maven存储库?

ssc*_*uth 7 concourse

我的目标是能够使用councourse构建管道构建,打包和测试使用maven构建的java项目.

这样的设置就绪,一切运行正常,但由于我们的连接的maven下载速度不佳,构建时间太长.

我的构建作业yml文件使用以下资源作为maven构建的基础:

# ...
image_resource:
  type: docker-image
  source:
    repository: maven
    tag: '3.3-jdk-8'
# ...
Run Code Online (Sandbox Code Playgroud)

我知道每个建筑物都有一块"空白石板",这是因为设计上有很多东西.

现在我的问题是:什么是缓存本地maven存储库的好方法(比如说,至少有一些基本内容,如Spring和它的依赖项)?

以下选项出现在我的脑海中:

  1. 使用已内置依赖项的docker镜像
  2. 创建一个为我提供所需依赖项的资源

据我所知,选项1)不会使构建的下载大小变小,因为大厅似乎没有缓存用作构建作业基础的docker镜像(或者我错在这里?)

在我继续之前,我想确保以下选项2)给我带来任何好处 - 使用concourse缓存docker图像作为资源吗?

我可能会错过一些东西,因为我对国会比较陌生.如果我强迫你在这里说明显而易见的话,请原谅我.:)

Whi*_*ght 8

  • 假设您的Nexus是本地的,我会调查为什么下载速率很差,因为在本地使用像Nexus和Artifactory这样的东西是目前最简单的缓存方式.它们将管理缓存的依赖项的生命周期,这样您就不会将依赖项缓存到需要它们的时间更长,并且在使用它们时会添加新的依赖项.
  • 如果要在作业的任务之间共享缓存,则在任务output的缓存依赖项文件夹(.m2maven的文件夹)中将其用作input另一个任务.
  • 如果要在作业中单个任务的所有执行之间共享缓存,还可以将任务配置为缓存文件夹.
  • 如果要在作业之间进行缓存,则可以:

我认为Concourse CI会缓存用于任务的docker镜像,但也可以将它们作为管道的资源,然后使用image任务的参数来传递该资源.你可以看到缓存的内容以及使用volumes命令的时间fly.

  • @sschuth广场团队刚刚发布了一篇关于为Ruby宝石做这件事的[博客文章](http://engineering.pivotal.io/post/concourse-docker-image-resource-cache-tutorial/). (2认同)