java - Maven 在 Docker 上构建和测试非常慢

标签 java docker maven gitlab-ci gitlab-ci-runner

我正在尝试设置我的 Gitlab CI/CD 来编译和运行我的 Java/Maven/Spring Boot 应用程序的测试。 我已经设置了一个 Gitlab Runner 并创建了我的 .gitlab-ci.yml ,一切都有效,但非常慢。 我已经为我的运行者尝试了很多配置,但没有成功。

所以我退后一步,尝试在本地计算机上的 Docker 上运行测试。

直接在我的机器上运行的构建 + 测试需要 17 分钟。 在 docker 上运行的构建 + 测试需要超过 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 干净编译测试

我需要在 docker 内部构建至少有一个关闭时间(17 分钟)。

最佳答案

找到问题了,是Maven Surefire插件的问题。

默认情况下,surefire 将 fork 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>

secret 是:argLine 与 -Xverify:none -XX:TieredStopAtLevel=1 -XX:-TieredCompilationforkCount=0

关于java - Maven 在 Docker 上构建和测试非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67287212/

相关文章:

java - WebSphere MQ 低延迟消息传递 - 它是否具有 JMS(或类似 JMS)API?

java - 从用于 http 连接的字符串中删除空格

apache-spark - 使用来自私有(private)注册表的自定义 Docker 镜像的 Spark 作业

docker - 将 .war 部署到产品所有者服务器

maven - mvnrepository.com 上的图标和标签

java - SoapUI 5.0 oracle 连接 jars

Java - 无论 JRE 版本如何,查找正在使用的 tzdata 版本

docker - minikube : not able to connect a locally deployed nginx service

java - spring-boot-maven-plugin 重新打包执行默认失败

java - 根据maven配置文件排除嵌入式服务器