mir*_*onq 12 java containers maven maven-surefire-plugin docker
按照标题:我正试图从容器化的詹金斯奴隶那里运行Maven自动化测试,并且经过一个星期的斗争,现在我已经没有想法了.它在具有4G RAM的AWS实例上工作,但在不受限制的(在RAM和CPU上)容器中,它失败并出现如下错误.它运行的唯一情况是我禁用Failsafe插件的分支,但这不是一个选项.
我尝试了各种各样的Java/Maven/Failsafe/Surefire选项,我可以用谷歌找到但没有运气(比如添加全局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>
Run Code Online (Sandbox Code Playgroud)
2017-10-10T15-02-35_189-jvmRun1.dump:
# Created on 2017-10-10T15:02:36.303
Killing self fork JVM. Maven process died.
Run Code Online (Sandbox Code Playgroud)
Der*_*k M 16
尝试降级到Surefire 1.18.1.今晚我遇到了这个问题,并花了几个小时,到目前为止,为什么新的Surefire版本在Docker下破解并不容易.
*更新*
我遇到了Alpine linux的问题,但是当使用Ubuntu或Debian基本图像时一切都很好.因此1.21内的某些内容破坏了与某些操作系统的兼容性.
Mik*_*iuk 10
我在以下环境中遇到了同样的问题:来自alpine 3.7的docker镜像,maven surefire插件版本2.21.0.
SUREFIRE-1422描述了其根本原因:surefire尝试ps -p用来检查分叉进程.我的解决方案是添加procps:
RUN apk add --no-cache procps
Run Code Online (Sandbox Code Playgroud)
我知道它已经有一段时间了,但是我会在这个问题上添加我的解决方案,这个问题花了我一天多的时间来修复.
问题:我在Docker容器中的PaaS中运行集成测试,无法控制我的进程的内存分配.默认行为是failafe/surfire分叉JVM并对其运行测试.我找不到一种方法来控制分叉的JVM的内存分配,并且测试保持失败并显示错误"启动fork时发生错误"也在日志中看到"分叉的VM终止而没有说正确的再见docker",具体取决于哪个版本的我正在努力尝试失败.
解决方案:我的解决方案是禁用JVM的分支并让所有测试在与主maven进程相同的JVM中运行,现在这对许多人来说可能不是理想的解决方案但是如果你只能控制最大内存分配它会工作主要的maven过程.
要禁用分叉,就像在配置中设置forkMode一样简单:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
Run Code Online (Sandbox Code Playgroud)
.....
更新: 由于提供此解决方案,您似乎现在可以将params传递给分叉的JVM,因此不需要早期的解决方案.
来自Forked Test Execution下的maven文档:
使用该
argLine属性,您可以指定要传递给分叉JVM进程的其他参数,例如内存设置.来自主maven进程的系统属性变量也被传递给分叉进程.此外,您可以使用该元素systemPropertyVariables指定在测试执行期间添加到系统属性的变量和值.
| 归档时间: |
|
| 查看次数: |
6331 次 |
| 最近记录: |