2017-09-28 129 views
3

我有一个开源scala项目(https://github.com/lucidsoftware/xtract)。在运行测试时,travis-ci上的构建一直挂起,对于scala 2.11和2.12都是如此。有时它会在编译之后和测试输出之前挂起,有时会在运行测试过程中挂起。我尝试了多次改变travis,包括尝试使用和不使用sudo: false,sbt的不同版本,以不同的方式分割sbt命令,使用oraclejdk8和openjdk8等。sbt挂在travis-ci上测试期间

我做错了什么或者是这是一个错误?

样品失败:https://travis-ci.org/lucidsoftware/xtract/jobs/280974227

我.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 

编辑

未能与SBT -debug选项:https://travis-ci.org/lucidsoftware/xtract/jobs/281081862

它做的最后一件事是

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

编辑2

的一些注意事项。该项目有多个子项目。构建在运行测试时暂停,测试在他们自己的项目中进行,因为它们依赖于核心代码以及针对项目特定specs2匹配器的单独子项目。

+0

很多人(包括我)使用Travis一直运行sbt测试没有问题,所以大概这个问题必须涉及到你的项目特定的东西。运行'sbt --debug'而不是普通的'sbt'可能有助于追踪死亡。您可能还会看到特拉维斯是否提供任何方式在作业挂起时获取JVM堆栈跟踪,以帮助排除故障 –

+0

您是否尝试过[forking](http://www.scala-sbt.org/0.12.3/docs/) Detailed-Topics/Forking.html)启用? –

+0

@SzymonBiliński我试过分叉。我遇到了同样的问题。 – Thayne

回答

1

我想我终于想通了事情的原委。

我能够在travisci/ci-garnet:packer-1512502276-986baf0码头集装箱中重现问题。尽管要运行我必须找到并安装版本1.1.1的sbt-launch.jar,因为安装的引导程序不适用于任何版本1.0或更高版本。我从其他语言的东西中删除了主文件夹中的几个文件夹,以释放下载工件的磁盘空间。

它停滞后,我采取了java进程的线程转储(通过发送一个QUIT信号)。

输出包括这样的:

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" 

所以我知道有这是防止其进展陷入僵局。

一些谷歌搜索后,我发现了一个mockito的错误(https://github.com/mockito/mockito/issues/1067)。

解决方法是为测试禁用parallelExecution。

1

这是一个10分钟的编译器超时。也许内存限制导致太多交换。 -Xms2048M -Xmx2048M -Xss6M -XX:MaxPermSize=512M

+0

这是个好主意。不幸的是,它仍然失速:( – Thayne

0

我得到了同样的问题。添加到您的build.sbt

logLevel := Level.Debug 

,使您可以使用日志调试检查什么是要去英寸在我的情况SBT一直在寻找

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

我试过启用调试,最后一行只是说它正在为DefaultXmlReadersSpec运行TaskDef(请参阅我的第一次编辑)。 – Thayne

+0

您是否尝试将'travis_wait 30'添加为前缀到你​​的sbt命令?那就是'install:travis_wait 30 sbt ++ $ TRAVIS_SCALA_VERSION update' –