Java Maven在Docker上的构建和测试速度非常慢
我正在尝试设置Gitlab CI/CD,以便为Java/Maven/Spring启动应用程序编译和运行测试。 我已经安装了一个Gitlab Runner并创建了我的.Gitlab-ci.yml,这一切都很有效,但速度非常慢。 我为我的跑步者尝试了许多配置,但都没有成功 所以我退了一步,试着在本地机器上运行Docker上的测试 直接在我的机器上运行的构建+测试需要17分钟。 在docker上运行的build+测试需要1个多小时 我获得的最佳性能是使用以下docker命令:Java Maven在Docker上的构建和测试速度非常慢,java,docker,maven,gitlab-ci,gitlab-ci-runner,Java,Docker,Maven,Gitlab Ci,Gitlab Ci Runner,我正在尝试设置Gitlab CI/CD,以便为Java/Maven/Spring启动应用程序编译和运行测试。 我已经安装了一个Gitlab Runner并创建了我的.Gitlab-ci.yml,这一切都很有效,但速度非常慢。 我为我的跑步者尝试了许多配置,但都没有成功 所以我退了一步,试着在本地机器上运行Docker上的测试 直接在我的机器上运行的构建+测试需要17分钟。 在docker上运行的build+测试需要1个多小时 我获得的最佳性能是使用以下docker命令: docker run-i
docker run-it--rm--name comp2--mount type=bind,source=“C:/ProjetosJava/eaud”,destination=/usr/src/mymaven-e MAVEN_OPTS='-Xdebug-Xnoagent-Djava.compiler=NONE-Xmx4096m-Xms1024m-XX:MaxPermSize=1024m-Dmaven.repo.local=.m2/repository-XX:+tieredcomilation-XX:TieredStopAtLevel=1'-w/usr/src/mymaven-MAVEN-3.3-jdk-8/bin/bash
在bash里面我做到了:
mvn-s.m2/settings.xml干净编译测试
我需要docker内部的构建至少有一个关闭时间(17分钟)。发现了问题,是Maven Surefire插件 默认情况下,surefire将派生JVM,当它这样做时,它不会从mvn命令继承JAVA_选项 因此,我能够通过将这些配置配置到插件来缩短构建时间:
org.apache.maven.plugins
maven surefire插件
3.0.0-M5
真的
-Xms256m-Xmx1024m-XX:MaxPermSize=512m-Xverify:none-XX:TieredStopAtLevel=1-XX:-TieredCompilation
假的
0
org.apache.maven.surefire
surefire-junit47
3.0.0-M5
秘密是:argLine with-Xverify:none-XX:TieredStopAtLevel=1-XX:-tieredcomployment
而且
forkCount=0
发现了问题,是Maven Surefire插件
默认情况下,surefire将派生JVM,当它这样做时,它不会从mvn命令继承JAVA_选项
因此,我能够通过将这些配置配置到插件来缩短构建时间:
org.apache.maven.plugins
maven surefire插件
3.0.0-M5
真的
-Xms256m-Xmx1024m-XX:MaxPermSize=512m-Xverify:none-XX:TieredStopAtLevel=1-XX:-TieredCompilation
假的
0
org.apache.maven.surefire
surefire-junit47
3.0.0-M5
秘密是:argLine with-Xverify:none-XX:TieredStopAtLevel=1-XX:-tieredcomployment
而且
forkCount=0
我不知道您的构建速度慢的原因(我想,如果没有进一步的信息,没有其他人会知道),但我知道的是clean compile test
表明您不知道Maven的生命周期。对于测试,只需运行clean test
。是否也看到您将内存配置为4 GiB内存?真的需要吗?4gb是一种尝试。。我什么都试过了,但是构建速度比本地机器上的要慢……@renanleandrof抱歉,这个评论听起来可能有点傲慢。但无论如何,您应该将clean compile test
更改为clean test
。多少LoC?有多少个测试?有多少模块?测试需要多长时间?第二:一般来说,容器中的构建总是比裸机上的构建慢,因为您要添加几个层……而且您还没有在docker容器中映射本地缓存,这意味着每个构建都会下载很多。为什么要使用Maven 3.3?而不是最近的?为什么容器中的内存设置如此庞大?你的Docker守护进程支持吗?内存增强不会减少构建时间……我不知道为什么构建速度慢(我想,如果没有进一步的信息,没有其他人会知道),但我知道的是,clean compile test
表明您不知道Maven的生命周期。对于测试,只需运行clean test
。是否也看到您将内存配置为4 GiB内存?真的需要吗?4gb是一种尝试。。我什么都试过了,但是构建速度比本地机器上的要慢……@renanleandrof抱歉,这个评论听起来可能有点傲慢。但无论如何,您应该将clean compile test
更改为clean test
。多少LoC?有多少个测试?有多少模块?测试需要多长时间?第二:一般来说,容器中的构建总是比裸机上的构建慢,因为您要添加几个层……而且您还没有在docker容器中映射本地缓存,这意味着每个构建都会下载很多。为什么要使用Maven 3.3?而不是最近的?为什么容器中的内存设置如此庞大?你的Docker守护进程支持吗?内存增强不会减少构建时间…我怀疑是否需要依赖项,因为它是由项目的适当依赖项(junit)自动完成的。。。你真的需要1 GiB来进行单元测试吗?我怀疑是否需要依赖关系,因为它是由项目的适当依赖关系(junit)自动完成的。。。你真的需要1 GiB来进行单元测试吗?