我们大约有10个不同的应用程序,它们是Groovy的Spring Boot项目。
我们所有的项目都可以在所有开发人员工作站中正确构建,并且可以正常运行直到昨天,但是突然之间,所有项目今天都仅在我们的GitLab CI管道中停止工作,并出现以下错误:
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:37 min
[INFO] Finished at: 2018-10-31T17:49:11Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test) on project ctg-oms-component: There are test failures.
[ERROR]
[ERROR] Please refer to /builds/ctg-integrations/ctg-oms-component/target/surefire-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] ExecutionException The forked VM terminated without properly saying goodbye. VM crash or System.exit called?
我已经提取了与使用我们的GitLab CI管道相同的docker映像,测试了构建项目,并且一切正常。但是,该错误仅在GitLab CI中发生。
经过调查,似乎surefire正在创建一个使GitLab CI docker崩溃的fork。为了解决此问题,我在显式配置下方添加了避免分叉的VM的方法,这避免了上述错误。
<!-- Needed only for GitLab CI -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkCount>0</forkCount>
</configuration>
</plugin>
您知道为什么会这样吗?还有另一种修复GitLab CI的方法来避免此问题吗?我真的不喜欢这种解决方法,因为这只是避免GitLab CI爆炸的一种方法,但是却不知道在Gitlab中如何处理Docker。
答案 0 :(得分:7)
问题与最新的maven docker映像有关。
存在一个公开的github问题,人们报告了同样的问题: https://github.com/carlossg/docker-maven/issues/90
经过调查,我可以使用alpine
版本解决问题,省去了添加maven-surefire-plugin
解决方法的麻烦。值得一提的是,使用surefire解决方法会带来另一个问题,例如jacoco之类的插件因为需要VM分支而无法运行。
因此,这些图像可以无缝工作(不需要surefire解决方法):
但是,如果我们使用非高山版本,问题仍然存在。
答案 1 :(得分:2)
尝试将<useSystemClassLoader>false</useSystemClassLoader>
添加到您的maven-surefire-plugin配置中。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
答案 2 :(得分:2)
我们找到了根案例,并在3.0.0-M4 和3.0.0-SNAPSHOT版本中对其进行了修复:
https://issues.apache.org/jira/browse/SUREFIRE-1702
答案 3 :(得分:1)
我遇到了同样的问题
您可以在此处找到我在gitlab上为此创建的问题,并提供详细说明:https://gitlab.com/gitlab-org/gitlab-ce/issues/53734
我还发现了一个“解决方法”。 maven:3.5.3-jdk-8
作为在其上执行构建的docker映像。或者,是maven-surefire-plugin上的forkCount=0
属性。
但这令人不安。突然之间,构建如何开始失败?不知道,我认为我没有解决此问题所需的经验。
到那时,也许这对您有帮助
答案 4 :(得分:0)
当我在gitlab-ci.yml中将maven:3-jdk-8用于maven构建时,我遇到了同样的问题。我将其更改为maven:3-jdk-9,问题消失了。