GitLab CI 由于 maven-surefire-plugin 与 VM 崩溃而失败
GitLab CI is failing due to maven-surefire-plugin with VM crash
我们有大约 10 个不同的应用程序 Spring 引导项目 Groovy。
我们所有的项目都在所有开发人员工作站中正确构建,直到昨天它们都是 运行 正确的,但是突然间所有这些项目今天都停止工作,仅在我们的 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 崩溃的分支。为了解决这个问题,我在下面添加了显式配置以避免分叉 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。
尝试将 <useSystemClassLoader>false</useSystemClassLoader>
添加到您的 maven-surefire-plugin 配置中。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
当我在我的 gitlab-ci.yml 中使用 maven:3-jdk-8 进行 Maven 构建时,我遇到了同样的问题。我将其更改为 maven:3-jdk-9,问题消失了。
我遇到了同样的问题
你可以在这里找到我在 gitlab 上为此创建的问题,并有详细的解释:https://gitlab.com/gitlab-org/gitlab-ce/issues/53734
另外,我发现了一个"workaround"。 maven:3.5.3-jdk-8
作为正在执行构建的 docker 图像。或者,forkCount=0
属性 on maven-surefire-plugin.
但这令人不安。构建如何突然开始失败?不知道,而且我认为我没有解决这个问题所需的经验。
到那时,也许这对你有帮助
这些问题与最新的 maven docker 图像有关。
有一个未解决的 github 问题,人们报告了同样的问题:
https://github.com/carlossg/docker-maven/issues/90
经过调查,我可以使用 alpine
版本解决问题,这让我无需添加 maven-surefire-plugin
解决方法。重要的是要提到使用 surefire 解决方法会带来另一个问题,例如像 jacoco 这样的插件不需要 运行,因为它们需要 VM fork。
因此,这些图像可以无缝工作(不需要万无一失的解决方法):
- maven:3.3.9-jdk-8
- maven:3.5.3-jdk-8
- maven:3.5.4-jdk-8-高山
- maven:3.6.0-jdk-8-alpine
但是,如果我们使用非 alpine 版本,问题仍然存在。
我们找到了根本案例并在版本 3.0.0-M4 和 3.0.0-SNAPSHOT 中修复了它:
https://issues.apache.org/jira/browse/SUREFIRE-1702
我们有大约 10 个不同的应用程序 Spring 引导项目 Groovy。
我们所有的项目都在所有开发人员工作站中正确构建,直到昨天它们都是 运行 正确的,但是突然间所有这些项目今天都停止工作,仅在我们的 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 崩溃的分支。为了解决这个问题,我在下面添加了显式配置以避免分叉 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。
尝试将 <useSystemClassLoader>false</useSystemClassLoader>
添加到您的 maven-surefire-plugin 配置中。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
当我在我的 gitlab-ci.yml 中使用 maven:3-jdk-8 进行 Maven 构建时,我遇到了同样的问题。我将其更改为 maven:3-jdk-9,问题消失了。
我遇到了同样的问题
你可以在这里找到我在 gitlab 上为此创建的问题,并有详细的解释:https://gitlab.com/gitlab-org/gitlab-ce/issues/53734
另外,我发现了一个"workaround"。 maven:3.5.3-jdk-8
作为正在执行构建的 docker 图像。或者,forkCount=0
属性 on maven-surefire-plugin.
但这令人不安。构建如何突然开始失败?不知道,而且我认为我没有解决这个问题所需的经验。
到那时,也许这对你有帮助
这些问题与最新的 maven docker 图像有关。
有一个未解决的 github 问题,人们报告了同样的问题: https://github.com/carlossg/docker-maven/issues/90
经过调查,我可以使用 alpine
版本解决问题,这让我无需添加 maven-surefire-plugin
解决方法。重要的是要提到使用 surefire 解决方法会带来另一个问题,例如像 jacoco 这样的插件不需要 运行,因为它们需要 VM fork。
因此,这些图像可以无缝工作(不需要万无一失的解决方法):
- maven:3.3.9-jdk-8
- maven:3.5.3-jdk-8
- maven:3.5.4-jdk-8-高山
- maven:3.6.0-jdk-8-alpine
但是,如果我们使用非 alpine 版本,问题仍然存在。
我们找到了根本案例并在版本 3.0.0-M4 和 3.0.0-SNAPSHOT 中修复了它:
https://issues.apache.org/jira/browse/SUREFIRE-1702