我们大约有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。
这些问题与最新的maven docker映像有关。
有一个公开的github问题,人们报告了同样的问题:https : //github.com/carlossg/docker- maven/issues/90
经过调查后,我可以使用alpine节省了maven-surefire- plugin解决方法的版本来解决问题。值得一提的是,使用surefire解决方法会带来另一个问题,例如像jacoco这样的插件因为需要VM分支而无法运行。
alpine
maven-surefire- plugin
因此,这些图像可以无缝运行(不需要surefire解决方法):
但是,如果使用非高山版本,则问题仍然存在。