Docker Maven 构建和测试非常慢
Maven build and tests very slow on Docker
我正在尝试设置我的 Gitlab CI/CD 来为我的 Java/Maven/Spring 启动应用程序编译和 运行 测试。
我已经设置了一个 Gitlab Runner 并创建了我的 .gitlab-ci.yml 并且一切正常,但是非常慢。
我已经为我的 运行 用户尝试了很多配置,但都没有成功。
所以我退后一步,尝试在我的本地机器上 运行 Docker 上的测试。
直接在我的机器上构建 + 测试 运行ning 需要 17 分钟。
docker 上的构建 + 测试 运行ning 花费了超过 1 小时。
我获得的最佳性能是使用这个 docker 命令:
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:+TieredCompilation -XX:TieredStopAtLevel=1' -w /usr/src/mymaven maven:3.3-jdk-8 /bin/bash
在bash里面我做了:
mvn -s .m2/settings.xml clean compile test
我需要 docker 内的构建至少有一个关闭时间(17 分钟)。
找到问题了,是Maven Surefire插件的问题。
默认情况下,surefire 会分叉 JVM,当它这样做时,它不会从 mvn 命令继承 JAVA_OPTS。
所以,我能够通过将这些配置配置到插件来减少构建时间:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<systemPropertyVariables>
<java.awt.headless>true</java.awt.headless>
</systemPropertyVariables>
<argLine>-Xms256m -Xmx1024m -XX:MaxPermSize=512m -Xverify:none -XX:TieredStopAtLevel=1 -XX:-TieredCompilation</argLine>
<printSummary>false</printSummary>
<forkCount>0</forkCount>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>3.0.0-M5</version>
</dependency>
</dependencies>
</plugin>
秘诀是:argLine 与 -Xverify:none -XX:TieredStopAtLevel=1 -XX:-TieredCompilation
和 forkCount=0
.
我正在尝试设置我的 Gitlab CI/CD 来为我的 Java/Maven/Spring 启动应用程序编译和 运行 测试。 我已经设置了一个 Gitlab Runner 并创建了我的 .gitlab-ci.yml 并且一切正常,但是非常慢。 我已经为我的 运行 用户尝试了很多配置,但都没有成功。
所以我退后一步,尝试在我的本地机器上 运行 Docker 上的测试。
直接在我的机器上构建 + 测试 运行ning 需要 17 分钟。 docker 上的构建 + 测试 运行ning 花费了超过 1 小时。
我获得的最佳性能是使用这个 docker 命令:
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:+TieredCompilation -XX:TieredStopAtLevel=1' -w /usr/src/mymaven maven:3.3-jdk-8 /bin/bash
在bash里面我做了:
mvn -s .m2/settings.xml clean compile test
我需要 docker 内的构建至少有一个关闭时间(17 分钟)。
找到问题了,是Maven Surefire插件的问题。
默认情况下,surefire 会分叉 JVM,当它这样做时,它不会从 mvn 命令继承 JAVA_OPTS。
所以,我能够通过将这些配置配置到插件来减少构建时间:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<systemPropertyVariables>
<java.awt.headless>true</java.awt.headless>
</systemPropertyVariables>
<argLine>-Xms256m -Xmx1024m -XX:MaxPermSize=512m -Xverify:none -XX:TieredStopAtLevel=1 -XX:-TieredCompilation</argLine>
<printSummary>false</printSummary>
<forkCount>0</forkCount>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-junit47</artifactId>
<version>3.0.0-M5</version>
</dependency>
</dependencies>
</plugin>
秘诀是:argLine 与 -Xverify:none -XX:TieredStopAtLevel=1 -XX:-TieredCompilation
和 forkCount=0
.