web-dev-qa-db-ja.com

Maven-surefire-pluginが原因でGitLabCIが失敗しているVMクラッシュ

Groovyを使用したSpringBootプロジェクトである約10の異なるアプリケーションがあります。

すべてのプロジェクトはすべての開発者ワークステーションで正しくビルドされ、昨日まで正しく実行されていましたが、突然、すべてのプロジェクトがGitLabCIパイプラインでのみ動作を停止しました。エラーは次のとおりです。

[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イメージをプルし、プロジェクトのビルドをテストしましたが、すべてが正しく機能します。ただし、エラーはGitLabCIでのみ発生します。

調査の結果、surefireがGitLabCIドッカーをクラッシュさせるフォークを作成しているようです。これを修正するために、フォークされたVMを回避するために、以下の明示的な構成を追加しました。これにより、上記のエラーが解消されました。

<!-- Needed only for GitLab CI -->
<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <forkCount>0</forkCount>
    </configuration>
</plugin>

なぜこれが起こっているのか知っていますか?この問題を回避するためにGitLabCIを修正する別の方法はありますか?この回避策は、GitLab CIの爆発を回避するための方法にすぎませんが、DockerがGitlabの舞台裏でどのように処理されるかがわからないため、あまり好きではありません。

7
Federico Piazza

問題は、最新のMavenDockerイメージに関連しています。

人々が同じ問題を報告したオープンなgithubの問題があります: https://github.com/carlossg/docker-maven/issues/9

調査の結果、Alpineバージョンを使用して問題を解決できたため、maven-surefire-plugin回避策を追加する手間が省けました。 surefireの回避策を使用すると、VMフォークが必要なため、jacocoなどのプラグインが実行されないなどの別の問題が発生することに注意してください。

したがって、これらの画像はシームレスに機能します(確実な回避策は必要ありません)。

  • 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以外のバージョンを使用すると、問題は解決しません。

8
Federico Piazza

私は同じ問題を抱えていました

詳細な説明とともに、私がgitlabで作成した問題をここで見つけることができます: https://gitlab.com/gitlab-org/gitlab-ce/issues/53734

また、「回避策」を見つけました。 maven:3.5.3-jdk-8ビルドが実行されているDockerイメージとして。または forkCount=0maven-surefire-pluginのプロパティ。

しかし、これは気がかりです。突然、ビルドが失敗し始めるのはどうしてですか?わからない、そして私はこれを解決するために必要な経験を持っていないと思います。

それまで、多分これはあなたを助けます

2
Catalin Stan

Maven-surefire-plugin構成に<useSystemClassLoader>false</useSystemClassLoader>を追加してみてください。

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <useSystemClassLoader>false</useSystemClassLoader>
    </configuration>
</plugin>
2
Vince

ルートケースを見つけ、バージョン3.0.0-M4および3.0.0-SNAPSHOTで修正しました。

https://issues.Apache.org/jira/browse/SUREFIRE-1702

https://issues.Apache.org/jira/browse/SUREFIRE-17

https://issues.Apache.org/jira/browse/SUREFIRE-1704

1
tibor17

Gitlab-ci.ymlのmaven:3-jdk-8をmavenビルドに使用したときにも同じ問題が発生しました。 maven:3-jdk-9に変更したところ、問題は解決しました。

0
Eric Bussieres