我的目标是能够使用 councourse 构建管道构建、打包和测试使用 Maven 构建的 java 项目。
这样的设置已经就位,一切都运行良好,但由于我们的 Nexus 的 Maven 下载率较差,构建时间太长。
我的构建作业 yml 文件使用以下资源作为 Maven 构建的基础:
# ...
image_resource:
type: docker-image
source:
repository: maven
tag: '3.3-jdk-8'
# ...
我知道这样一个事实,即每个构建都有一个“空白石板”,这在某种程度上是通过设计内置于大厅的。
现在我的问题是:缓存本地 Maven 存储库的好方法是什么(比如说,里面至少有一些基本的东西,比如 Spring 及其依赖项)?
我想到以下选项:
- 使用已经内置依赖项的 docker 镜像
- 创建一个为我提供所需依赖项的资源
据我所知,选项 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(使用前将#替换为@)