2017-09-28 2 views
3

J'ai un projet de scala open source (https://github.com/lucidsoftware/xtract). La construction sur travis-ci se bloque constamment lors des tests, pour les deux scala 2.11 et 2.12. Parfois, il se bloque après la compilation et avant toute sortie des tests, d'autres fois il se bloque au milieu des tests en cours d'exécution. J'ai essayé plusieurs itérations de changer le travis, inclding essayer avec et sans sudo: false, différentes versions de SBT, fractionnement des commandes de SBT de différentes manières, en utilisant les deux oraclejdk8 et openjdk8, etc.sbt se bloque pendant les tests sur travis-ci

que je fais quelque chose de mal ou est c'est un bug?

échec de l'échantillon: https://travis-ci.org/lucidsoftware/xtract/jobs/280974227

Mon .travis.yml:

language: scala 

scala: 
    - 2.11.11 
    - 2.12.3 

jdk: 
    - openjdk8 

dist: trusty 
sudo: false 

cache: 
    directories: 
    - $HOME/.ivy2/cache 
    - $HOME/.sbt/ 

after_success: 
    - sbt ++$TRAVIS_SCALA_VERSION package 
    - | 
    if [ -n "$TRAVIS_TAG" ] || ([ "$TRAVIS_PULL_REQUEST" == false ] && [ "$TRAVIS_BRANCH" == master ]) 
    then 
     mkdir ~/.pgp 
     echo $PGP_PUBLIC | base64 --decode > ~/.pgp/pubring 
     echo $PGP_SECRET | base64 --decode > ~/.pgp/secring 
     echo "Publishing snapshot" 
     sbt ++$TRAVIS_SCALA_VERSION xtract/publishSigned xtractTesting/publishSigned 
    fi 
deploy: 
    api_key: $GITHUB_AUTH 
    file: 
    - xtract-core/target/**/*.jar 
    - testing/target/**/*.jar 
    file_glob: true 
    provider: releases 
    skip_cleanup: true 
    on: 
    tags: true 

install: sbt ++$TRAVIS_SCALA_VERSION update 
before_cache: 
    #Avoid unncessary cache updates 
    - find $HOME/.ivy2 -name "ivydata-*.properties" -print -delete 
    - find $HOME/.sbt -name "*.lock" -print -delete 

EDIT

Échec avec -debug option sur SBT: https://travis-ci.org/lucidsoftware/xtract/jobs/281081862

La dernière chose qu'il fait est

[debug] Running TaskDef(com.lucidchart.open.xtract.DefaultXmlReadersSpec, specs2 Specification fingerprint, false, [SuiteSelector]) 

Modifier 2

Quelques notes. Ce projet a plusieurs sous-projets. La génération s'arrête pendant l'exécution des tests et les tests sont dans leur propre projet, car ils dépendent à la fois du code principal et d'un sous-projet distinct pour les coupleurs specs2 spécifiques au projet.

+0

Beaucoup de personnes (dont moi) utilisent Travis pour exécuter des tests sbt tout le temps sans problème, donc le problème doit probablement impliquer quelque chose de spécifique à votre projet. exécuter 'sbt --debug' au lieu de' sbt' peut aider à traquer le blocage. vous pouvez également voir si Travis fournit un moyen d'obtenir une trace de pile JVM lorsqu'un travail se bloque, pour aider à dépanner –

+0

Avez-vous essayé avec [forking] (http://www.scala-sbt.org/0.12.3/docs/ Detailed-Topics/Forking.html) activé? –

+0

@ SzymonBiliński J'ai essayé de forking. J'ai eu le même problème. – Thayne

Répondre

1

Je pense que j'ai finalement compris ce qui se passait.

J'ai été capable de reproduire le problème dans le conteneur docker travisci/ci-garnet: packer-1512502276-986baf0. Bien que pour que sbt fonctionne, j'ai dû trouver et installer le fichier sbt-launch.jar pour la version 1.1.1 car le programme d'amorçage installé ne fonctionne pas pour les versions 1.0 ou ultérieures. J'ai supprimé plusieurs dossiers du dossier de départ avec des trucs pour d'autres langues pour libérer de l'espace disque pour télécharger des artefacts. Après avoir décroché, j'ai pris un thread dump du processus java (en lui envoyant un signal QUIT).

La sortie comprenait ceci:

Found one Java-level deadlock: 
============================= 
"specs2-6": 
    waiting to lock monitor 0x00007fc6a4b9fb68 (object 0x00000000997e39f0, a sbt.internal.inc.classpath.ClasspathFilter), 
    which is held by "specs2-3" 
"specs2-3": 
    waiting to lock monitor 0x00007fc6d0df7298 (object 0x0000000098f700b0, a sbt.internal.inc.classpath.ClasspathUtilities$$anon$1), 
    which is held by "specs2-6" 

Je savais qu'il y avait une impasse qui l'empêchait de progresser.

Après quelques recherches, j'ai trouvé un bug pour mockito (https://github.com/mockito/mockito/issues/1067).

Une solution de contournement consiste à désactiver parallelExecution pour les tests.

1

Il s'agit d'un délai d'expiration du compilateur de 10 minutes. Peut-être que les limites de mémoire causent trop d'échange. -Xms2048M -Xmx2048M -Xss6M -XX:MaxPermSize=512M

+0

C'est une bonne idée. Malheureusement, il stagne toujours :( – Thayne

0

J'ai eu le même problème. Ajouter à votre build.sbt

logLevel := Level.Debug 

afin que vous puissiez utiliser le journal pour vérifier-debug ce qui se passe dans le. Dans mon cas sbt cherchait

sbt-chain: module revision found in cache: com.fasterxml.jackson#jackson-parent;2.8 
[debug]   tried /home/travis/.ivy2/local/com.fasterxml.jackson/jackson-bom/2.8.11/jars/jackson-bom.jar 
[debug]   tried https://repo1.maven.org/maven2/com/fasterxml/jackson/jackson-bom/2.8.11/jackson-bom-2.8.11.jar 
[debug] CLIENT ERROR: Not Found url=https://repo1.maven.org/maven2/com/fasterxml/jackson/jackson-bom/2.8.11/jackson-bom-2.8.11.jar 
[debug]   tried /home/travis/.sbt/preloaded/com.fasterxml.jackson/jackson-bom/2.8.11/jars/jackson-bom.jar 
[debug]   tried file:////home/travis/.sbt/preloaded/com/fasterxml/jackson/jackson-bom/2.8.11/jackson-bom-2.8.11.jar 
[debug]   tried https://repo1.maven.org/maven2/com/fasterxml/jackson/jackson-bom/2.8.11/jackson-bom-2.8.11.jar 
[debug] CLIENT ERROR: Not Found url=https://repo1.maven.org/maven2/com/fasterxml/jackson/jackson-bom/2.8.11/jackson-bom-2.8.11.jar 
+0

J'ai essayé avec le débogage activé, la dernière ligne est juste sbt disant qu'il exécute un TaskDef pour le DefaultXmlReadersSpec (voir ma première édition). – Thayne

+0

avez-vous essayé d'ajouter 'travis_wait 30' à préfixe à votre commande sbt? C'est à dire: install: travis_wait 30 sbt ++ $ TRAVIS_SCALA_VERSION mise à jour' –