Gitlab Ci。在阶段之间转移maven m2本地存储库

Gitlab Ci。在阶段之间转移maven m2本地存储库,gitlab,artifactory,gitlab-ci,gitlab-ci-runner,jfrog-cli,Gitlab,Artifactory,Gitlab Ci,Gitlab Ci Runner,Jfrog Cli,大家好。我在生产中使用gitlab ci。我有很多舞台。 1) 构建工件 2) 部署到外部服务器 3) 使用jfrogcli部署到artifactory 我在缓存maven本地存储库时遇到问题。我的跑步者在第一步(构建)下载所有依赖项,并在最后一步(部署到artifactory)执行相同的操作。此外,我的跑步者在最后阶段之前删除m2文件夹中的所有数据: Removing .m2/antlr/ Removing .m2/aopalliance/ Removing .m2/asm/ Removing

大家好。我在生产中使用gitlab ci。我有很多舞台。 1) 构建工件 2) 部署到外部服务器 3) 使用jfrogcli部署到artifactory

我在缓存maven本地存储库时遇到问题。我的跑步者在第一步(构建)下载所有依赖项,并在最后一步(部署到artifactory)执行相同的操作。此外,我的跑步者在最后阶段之前删除m2文件夹中的所有数据:

Removing .m2/antlr/
Removing .m2/aopalliance/
Removing .m2/asm/
Removing .m2/avalon-framework/
Removing .m2/backport-util-concurrent/
Removing .m2/ch/
Removing .m2/classworlds/
Removing .m2/com/
Removing .m2/commons-beanutils/
Removing .m2/commons-chain/
Removing .m2/commons-cli/
Removing .m2/commons-codec/
Removing .m2/commons-collections/
Removing .m2/commons-digester/
Removing .m2/commons-io/
Removing .m2/commons-lang/
Removing .m2/commons-logging/
Removing .m2/commons-validator/
Removing .m2/dom4j/
Removing .m2/io/
Removing .m2/javax/
Removing .m2/junit/
Removing .m2/log4j/
Removing .m2/logkit/
Removing .m2/net/
Removing .m2/org/
Removing .m2/oro/
Removing .m2/sslext/
Removing .m2/xml-apis/
Removing .m2/xmlunit/
Removing jfrog
Removing target/
我的gitlav ci yaml(无需第二步):


有几种方法可以处理构建作业/阶段之间的依赖关系

缓存

e、 m2的g缓存段

# Cache modules in between jobs
cache:
  key: ${CI_COMMIT_REF_SLUG} # cache is for per branch
  paths:
  - ${CI_PROJECT_DIR}/.m2
缓存也可以使用类似(类似于s3的开源存储解决方案)的方法来执行。与gitlab的集成。但由于缓存需要压缩和解压,大量工件可能会导致速度缓慢(但显然比不使用缓存要快)。为了避免这个问题,可以使用docker卷

码头工人数量

基本上,我们可以使用开箱即用的docker卷,例如从主机位置安装的
~/.m2
。如果您在kubernetes集群中使用,您可以利用它。您必须自定义构建映像位以支持装载依赖项目录,下面是mvn构建映像的示例。这种方法更好,因为您不能在构建目录之外缓存

e、 g.docker形象

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工件解决方案,指南是。

我知道这个解决方案。在我使用jfrog cli进行部署的第二步中,它们不起作用。我想jfrog cli mvn命令看不到m2文件夹。好的,您是否尝试过使用
/target
而不使用
*.jar
过滤?另外,您的
过期时间为5分钟,请确保不超过其运行部署时的时间。如果我的解释不清楚,请原谅我的语言。我不需要目标目录。我需要m2文件夹中的依赖项,从我构建的第一步开始。我不希望我的最后一步再次下载它,以进行jfrog cli 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