Docker 在CI服务器上运行的SBT测试非常慢

Docker 在CI服务器上运行的SBT测试非常慢,docker,sbt,Docker,Sbt,我在Bitbucket上设置了CI管道并运行 sbt "project api" "testOnly core.entities.UserSpec" 它在我的笔记本电脑上运行平稳,耗时约2秒。但当我尝试在CI服务器上运行它时,大约需要4分钟来运行一半的测试 UserSpec是用Spec2编写的,它没有任何数据库或繁重的计算。以下是大多数测试的样子: def addCredential_nonConfirmedEmail_notAllowed = { val emailAddress:

我在Bitbucket上设置了CI管道并运行

sbt "project api" "testOnly core.entities.UserSpec"
它在我的笔记本电脑上运行平稳,耗时约2秒。但当我尝试在CI服务器上运行它时,大约需要4分钟来运行一半的测试

UserSpec是用Spec2编写的,它没有任何数据库或繁重的计算。以下是大多数测试的样子:

def addCredential_nonConfirmedEmail_notAllowed = {
    val emailAddress: EmailAddress = Fixture.emailAddress("unconfirmed")
    val user: User = Fixture.user().copy(emailAddresses = Set(emailAddress))
    val result = user.addCredential(emailAddress, Fixture.password())

    val exception = result.failed.get.asInstanceOf[DomainException]
    exception.code mustEqual DomainExceptionType.Validation
    exception.message mustEqual "Email address must be confirmed before it can be used as part of credential"
}
CI使用“bigtruedata/sbt:0.13.15-2.11.11”图像在docker上运行。 为了解决这个问题,我花了两天时间拼命工作。首先,我指责CI并尝试:

  • gitlab ci
  • 沃克
还是没有运气

你能帮我解决这个问题吗?这就是我的sbt设置的样子

val projectSettings = Seq(
version := "1.0-SNAPSHOT",
scalaVersion := "2.11.11",
resolvers ++= Dependencies.resolvers,
fork in Test := false,
parallelExecution in Test := false)

终于,我找到了罪犯!是我,不是CI、docker或SBT

我在测试中使用Fixture.password()方法,该方法使用SecureRandom.getInstanceStrong,如
val salt=BCrypt.gensalt(10,SecureRandom.getInstanceStrong)
中所示。如果没有足够的随机性,它将阻塞线程。一旦我删除了SecureRandom.getInstanceStrong,它现在就可以正常工作了

在使用它之前,我应该了解一下Random和SecureRandom的区别,并因此浪费了3天时间。通过艰苦的方式学习:-D