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

2024-03-18

我的目标是能够使用 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 映像?

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


  • 假设您的 Nexus 是本地的,我会研究为什么下载率很低,因为在本地使用 Nexus 和 Artifactory 之类的东西是目前最简单的缓存方法。它们将管理缓存的依赖项的生命周期,这样您就不会缓存依赖项超过所需的时间,并且在使用时添加新的依赖项。
  • 如果您想在作业的任务之间共享缓存,那么output https://concourse-ci.org/tasks.html#schema.task.outputs缓存的依赖项文件夹(.m2任务的 maven 文件夹)并将其用作input https://concourse-ci.org/tasks.html#schema.task.inputs另一个任务的。作为参考,请参见以下示例:
 ---
 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:
             # ...
  • 如果要在作业中单个任务的所有执行之间共享缓存,还可以将任务配置为缓存文件夹 https://concourse-ci.org/tasks.html#schema.cache.path.
  • If you want to cached between jobs then you could:
    • 使用缓存的文件夹构建一个 docker 映像,但是当依赖项更新时,您需要对其进行管理,尽管这可以通过另一个管道实现。
    • 创建资源 https://concourse-ci.org/implementing-resource-types.html为您管理缓存。例如看看gradle 缓存资源 https://github.com/projectfalcon/gradle-cache-resource or npm 缓存资源 https://github.com/ymedlop-sandbox/npm-cache-resource,尽管他们要求输入来自git 资源 https://github.com/concourse/git-resource.

我认为 Concourse CI 确实缓存了用于任务的 docker 镜像,但也可以将它们作为管道的资源,然后使用image https://concourse-ci.org/jobs.html#schema.step.task-step.image传递该资源的任务参数。您可以使用以下命令查看缓存的内容以及缓存的时间volumes https://concourse-ci.org/administration.html#fly-volumes的命令fly.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在构建之间缓存 Maven 存储库? 的相关文章

随机推荐