web-dev-qa-db-fra.com

GitLab CI échoue à cause de maven-surefire-plugin avec VM crash

Nous avons environ 10 applications différentes qui sont des projets Spring Boot avec Groovy.

Tous nos projets ont été construits correctement dans tous les postes de travail de développeur et ils fonctionnaient correctement jusqu'à hier. Cependant, ils ne sont soudainement arrêtés de fonctionner aujourd'hui que dans nos pipelines GitLab CI avec l'erreur suivante:

[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?

J'ai tiré la même image de menu fixe qui utilise notre pipeline GitLab CI, testé la construction du projet et tout fonctionne correctement. Cependant, l'erreur ne se produit que dans GitLab CI.

Après une enquête, il semble que surfire crée une fourche qui provoque le blocage du docker GitLab CI. Afin de résoudre ce problème, j'ai ajouté la configuration explicite ci-dessous pour éviter l'utilisation de forked VM. Cette erreur a permis d'éliminer l'erreur ci-dessus.

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

Savez-vous pourquoi cela se produit? Existe-t-il un autre moyen de corriger GitLab CI pour éviter ce problème? Je n’aime pas beaucoup cette solution de contournement, car c’est juste un moyen d’empêcher GitLab CI d’exploser, mais je ne sais pas comment Docker est géré en coulisse dans Gitlab.

6
Federico Piazza

Les problèmes sont liés aux dernières images du docker Maven. 

Il existe un problème de github ouvert dans lequel des personnes ont signalé le même problème: https://github.com/carlossg/docker-maven/issues/90

Après une enquête, je pouvais résoudre le problème en utilisant la version Alpine qui me permettait d’ajouter la solution de contournement maven-surefire-plugin. Il est important de mentionner que l'utilisation de la solution de contournement infaillible soulève un autre problème, par exemple, les plugins tels que jacoco ne s'exécutent pas car ils ont besoin du fork VM.

Ainsi, ces images fonctionnent parfaitement (aucune solution de contournement infaillible n’était nécessaire): 

  • maven: 3.3.9-jdk-8
  • maven: 3.5.3-jdk-8
  • maven: 3.5.4-jdk-8-Alpine 
  • maven: 3.6.0-jdk-8-Alpine

Cependant, si nous utilisons la version non Alpine, le problème persiste.

6
Federico Piazza

Essayez d’ajouter <useSystemClassLoader>false</useSystemClassLoader> à votre configuration de maven-surefire-plugin.

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

J'ai eu le même problème

Vous trouverez ici le numéro que j'ai créé sur gitlab pour cela, avec des explications détaillées: https://gitlab.com/gitlab-org/gitlab-ce/issues/53734

En outre, j'ai trouvé une "solution de contournement". maven:3.5.3-jdk-8 en tant qu'image du menu fixe sur laquelle la génération est en cours d'exécution. Ou bien, la propriété forkCount=0 sur maven-surefire-plugin.

Mais c'est inquiétant. Comment, d'un coup, les constructions commencent à échouer? Je ne sais pas et je ne pense pas avoir l'expérience nécessaire pour résoudre ce problème.

Jusque-là, peut-être que cela vous aide

1
Catalin Stan

J'ai eu le même problème lorsque j'ai utilisé le maven: 3-jdk-8 dans mon fichier gitlab-ci.yml pour la compilation maven. Je l'ai changé en maven: 3-jdk-9 et le problème avait disparu.

0
Eric Bussieres