同事们,早上好。我在生产中使用gitlab ci。我有很多阶段。 1)构建神器 2)部署到外部服务器 3)使用jfrog cli部署到工件上
我在缓存Maven本地存储库时遇到问题。我的跑步者在第一步(构建)中下载了所有依赖项,并在最后一步(部署到工件)中进行了同样的操作。我的跑步者还在最后阶段之前从m2文件夹中删除了所有数据:
T
我的gitlav-ci yaml(无需第二步):
T
答案 0 :(得分:1)
有几种方法可以处理构建作业/阶段之间的依赖关系。
例如m2的缓存部分
# Cache modules in between jobs
cache:
key: ${CI_COMMIT_REF_SLUG} # cache is for per branch
paths:
- ${CI_PROJECT_DIR}/.m2
也可以使用minio之类的东西(类似于存储解决方案的开源s3)来进行缓存。与gitlab guide is available here集成。但是,由于缓存需要压缩和解压缩,因此大量工件可能会引入缓慢性(但显然,速度比没有缓存时要慢)。为了避免该问题,可以使用docker卷。
码头工人卷
基本上,我们可以使用从主机位置挂载的即用docker卷~/.m2
。如果您在kubernetes集群中使用,则可以利用kubnernets volume solutions来实现。您必须自定义构建映像位以支持安装依赖性目录,以下是mvn构建映像的示例。这种方法更好,因为您不能在构建目录之外进行缓存。
例如泊坞窗图片
FROM maven:3.5.4-jdk-8
# m2 dir on docker container
ENV MAVEN_OPTS "-Dmaven.repo.local=/.m2/repository"
ENV MAVEN_CLI_OPTS "-s /usr/local/.m2/settings.xml --batch-mode"
ADD .m2 /usr/local/.m2 # copy settings.xml to build image
# same as the m2 dir specified in MAVEN_OPTS
VOLUME /.m2
工件
如果您只想传递构建目录,例如/target
,您可以使用gitlab工件解决方案,指南为available here。