按照标题:我正试图从集装箱化的詹金斯奴隶那里运行Maven自动化测试,经过一个星期的斗争,现在我已经没有想法了。它在具有4G RAM的AWS实例上工作,但在不受限制的(在RAM和CPU上)容器中,它失败并出现如下错误。它运行的唯一情况是我禁用Failsafe插件的分配,但这不是一个选项。
我尝试了各种各样的Java / Maven / Failsafe / Surefire选项,我可以使用Google找到但没有运气(比如添加全局Java -Xmx选项以及pom.xml中的每个插件)。
有没有人像这样成功地运行它?
这似乎应该更容易处理,但是如果我有任何头发,我现在已经把头发拉到头上了。我仍然不喜欢承认失败的想法。请帮忙!
这些是插件在失败后创建的转储:
故障安全-summary.xml:
<?xml version="1.0" encoding="UTF-8"?>
<failsafe-summary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-sure
fire-plugin/xsd/failsafe-summary.xsd" result="254" timeout="false">
<completed>0</completed>
<errors>0</errors>
<failures>0</failures>
<skipped>0</skipped>
<failureMessage>org.apache.maven.surefire.booter.SurefireBooterForkException: The forked VM terminated without properly saying goodbye. VM cras
h or System.exit called?
Command was /bin/sh -c cd /var/lib/jenkins/workspace/ui_acceptance_test_chrome_docker_freestyle && /usr/lib/jvm/java-1.8-openjdk/jre/bin/ja
va -Dfile.encoding=UTF-8 -jar /var/lib/jenkins/workspace/ui_acceptance_test_chrome_docker_freestyle/target/surefire/surefirebooter81206735832436906
05.jar /var/lib/jenkins/workspace/ui_acceptance_test_chrome_docker_freestyle/target/surefire 2017-10-10T15-02-35_189-jvmRun1 surefire59539140137458
58339tmp surefire_03559885505222114015tmp
Error occurred in starting fork, check output in log
Process Exit Code: 1
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:686)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:535)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:280)
at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:245)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1124)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:954)
at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:832)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
</failureMessage>
</failsafe-summary>
2017-10-10T15-02-35_189-jvmRun1.dump:
# Created on 2017-10-10T15:02:36.303
Killing self fork JVM. Maven process died.
答案 0 :(得分:16)
尝试降级到Surefire 1.18.1。今晚我遇到了这个问题并花了几个小时,到目前为止,为什么新的Surefire版本在Docker下破解并不容易。
*更新*
我遇到了Alpine linux的问题,但是当使用Ubuntu或Debian基本图像时,一切都很好。因此1.21内的某些内容破坏了与某些操作系统的兼容性。
答案 1 :(得分:9)
我在以下环境中遇到了同样的问题:来自alpine 3.7的docker镜像,maven surefire插件版本2.21.0。
SUREFIRE-1422描述了其根本原因:surefire尝试使用ps -p
来检查分叉进程。我的解决方案是添加procps:
RUN apk add --no-cache procps
答案 2 :(得分:7)
我知道它已经有一段时间了,但是我会在这个问题上添加我的解决方案,这个问题花了我一天多的时间来修复。
问题:我在Docker容器中的PaaS中运行集成测试,无法控制我的进程的内存分配。默认行为是failafe / surfire分叉JVM并对其运行测试。我找不到一种方法来控制该分叉JVM的内存分配,并且测试因错误而失败&#34;启动fork&#34;还看到了#34;分叉的虚拟机终止了,但没有说得好再见的码头工人&#34;在日志中,取决于我正在尝试的故障安全版本。
解决方案:我的解决方案是禁用JVM的分支并让所有测试在与主maven进程相同的JVM中运行,现在这可能不是许多人的理想解决方案,但它会如果您只能控制主要maven进程的最大内存分配,则可以正常工作。
要禁用分支,就像在配置中设置forkMode一样简单:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
.....
<强>更新强> 由于提供此解决方案,您现在似乎可以将params传递给分叉的JVM,因此不需要早期的解决方案。
来自Forked Test Execution下的maven文档:
使用
argLine
属性,您可以指定其他参数 被传递给分叉的JVM进程,例如内存设置。系统 来自主maven进程的属性变量被传递给 分叉过程也是如此。此外,您可以使用该元素systemPropertyVariables
指定要添加的变量和值 测试执行期间的系统属性。
答案 3 :(得分:4)
我们突然遇到了完全相同的问题,但仅在我们的CI / CD管道(gitlab)上。 错误消息是:
error occurred in starting fork, check output in log
Process Exit Code: 1
org.apache.maven.surefire.booter.SurefireBooterForkException:
The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
原来,这与OpenJDK docker映像的新版本有关。
将useSystemClassLoader
属性设置为false可解决此问题:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<includes>
<include>**/*Test.java</include>
</includes>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
答案 4 :(得分:1)
在带有docker(zenika / alpine-maven)的高山上使用带有surefire 2.21.0版本的spring boot时,我们遇到了同样的问题。如前所述,降级到2.18.1可能是一种选择,并解决了分叉的vm终止问题,但是由于不同slf4j版本之间的不兼容性而引发了新问题。因此,我们对surefire 2.22.1版本进行了显式升级,从而解决了我们的问题。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
答案 5 :(得分:1)
在使用surefire 2.21.0的maven:3.5.4-jdk-8中进行构建时,遇到了同样的问题。 升级surefire也无济于事,但最终禁用分叉可以解决问题。
expand
答案 6 :(得分:1)
无论我怎么努力,我都无法解决。 删除了Java 11 ,并安装了Java 8 修复了所有问题。
sudo add-apt-repository ppa:openjdk-r/ppa -y
sudo apt update
sudo apt install openjdk-8-jdk openjdk-8-jre
答案 7 :(得分:0)
我可以确认在Fedora docker映像(2020)上也存在此问题-只需将maven-surefire-plugin升级到> = 2.22.0即可。