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の舞台裏でどのように処理されるかがわからないため、あまり好きではありません。
問題は、最新のMavenDockerイメージに関連しています。
人々が同じ問題を報告したオープンなgithubの問題があります: https://github.com/carlossg/docker-maven/issues/9
調査の結果、Alpine
バージョンを使用して問題を解決できたため、maven-surefire-plugin
回避策を追加する手間が省けました。 surefireの回避策を使用すると、VMフォークが必要なため、jacocoなどのプラグインが実行されないなどの別の問題が発生することに注意してください。
したがって、これらの画像はシームレスに機能します(確実な回避策は必要ありません)。
ただし、Alpine以外のバージョンを使用すると、問題は解決しません。
私は同じ問題を抱えていました
詳細な説明とともに、私がgitlabで作成した問題をここで見つけることができます: https://gitlab.com/gitlab-org/gitlab-ce/issues/53734
また、「回避策」を見つけました。 maven:3.5.3-jdk-8
ビルドが実行されているDockerイメージとして。または forkCount=0
maven-surefire-pluginのプロパティ。
しかし、これは気がかりです。突然、ビルドが失敗し始めるのはどうしてですか?わからない、そして私はこれを解決するために必要な経験を持っていないと思います。
それまで、多分これはあなたを助けます
Maven-surefire-plugin構成に<useSystemClassLoader>false</useSystemClassLoader>
を追加してみてください。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
ルートケースを見つけ、バージョン3.0.0-M4および3.0.0-SNAPSHOTで修正しました。
https://issues.Apache.org/jira/browse/SUREFIRE-1702
Gitlab-ci.ymlのmaven:3-jdk-8をmavenビルドに使用したときにも同じ問題が発生しました。 maven:3-jdk-9に変更したところ、問題は解決しました。