8

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

这样的设置已经到位,一切运行良好,但是由于我们的 nexus 的 maven 下载率低,构建时间太长了。

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

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

我知道这样一个事实,即每个建筑物都有一个“空白石板”,这在设计上是内置在大厅中的。

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

我想到了以下选项:

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

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

在我继续之前,我想确保以下选项 2) 给我带来任何优势 - 大厅是否缓存用作资源的 docker 图像?

我可能会错过一些东西,因为我对 councourse 比较陌生。如果我强迫你在这里陈述显而易见的事情,请原谅我。:)

4

3 回答 3

10
  • 假设您的 Nexus 是本地的,我会研究为什么下载率很低,因为在本地使用 Nexus 和 Artifactory 之类的东西是目前进行缓存的最简单方法。它们将管理您缓存的依赖项的生命周期,这样您就不会将依赖项缓存的时间超过需要它们的时间,并且在使用它们时会添加新的依赖项。
  • 如果要在作业的任务之间共享缓存,则将output缓存的依赖项文件夹(.m2Maven 文件夹)用作input另一个任务。作为参考,请参见以下示例:
 ---
 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:
             # ...
  • 如果要在作业中单个任务的所有执行之间共享缓存,也可以将任务配置为缓存文件夹
  • 如果您想在作业之间缓存,那么您可以:

我认为 Concourse CI 确实缓存了用于任务的 docker 图像,但也可以将它们作为管道的资源,然后使用image任务的参数来传递该资源。您可以volumes使用fly.

于 2016-11-22T09:20:58.190 回答
0

我可以确认 concourse 实际上确实缓存了 docker 图像,因此创建具有所有依赖项的图像可能不是一个坏选择。

于 2016-11-23T00:22:00.877 回答
0

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

于 2016-12-02T20:39:16.947 回答