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

时间:2016-11-22 07:43:33

标签: concourse

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

这样的设置已经到位,一切运行正常,但由于我们的连接中maven下载速度不佳,构建时间太长。

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

# ...
image_resource:
  type: docker-image
  source:
    repository: maven
    tag: '3.3-jdk-8'
# ...

我知道每个建筑物都有一块“空白石板”,这是因为设计很容易进入大厅。

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

我想到了以下选项:

  1. 使用已内置依赖项的docker镜像
  2. 创建一个为我提供所需依赖项的资源
  3. 据我所知,选项1)不会使构建的下载大小变小,因为大厅似乎没有缓存用作构建作业基础的docker镜像(或者我在这里错了吗?)

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

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

3 个答案:

答案 0 :(得分:7)

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

我认为Concourse CI会缓存用于任务的docker镜像,但也可以将它们作为管道的资源,然后使用任务的image参数来传递该资源。您可以使用fly的{​​{3}}命令查看缓存内容和持续时间。

答案 1 :(得分:0)

我可以确认大厅确实会缓存泊坞窗图像,因此创建一个具有所有依赖关系的图像可能不是一个糟糕的选择。

答案 2 :(得分:0)

您可以使用git资源类型用于缓存maven缓存的相同机制,就像现在这样:https://github.com/ymedlop-sandbox/npm-cache-resource(不是我的仓库)