我正在配置我们的CI基础架构,当项目加载失败时,sbt询问该怎么做:
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?
Run Code Online (Sandbox Code Playgroud)
这会挂起等待进程返回的构建.
有没有办法告诉sbt停止而不问在加载失败时该怎么办?
我有一个多模块播放!用 sbt 构建的应用程序,我在 CI 服务器上遇到了并行测试和进化的问题:当 sbt 开始测试并首先启动进化脚本时,其他失败,因为“数据库‘默认’处于不一致状态”一段时间(直到进化脚本停止)。
我知道如何手动以及如何从SBT运行它们执行变阵,但我不知道我怎么能堵住这个配置SBT确保变阵应用只有一次,并从所有模块的所有测试之前。
作为参考,我正在使用以下运行进化:
object ApplyEvolutions extends App {
OfflineEvolutions.applyScript(
new File("."),
this.getClass.getClassLoader,
args.headOption.getOrElse("default"))
}
Run Code Online (Sandbox Code Playgroud)
还有我的 sbt 设置:
val runEvolution = taskKey[Unit]("Applies evolutions")
lazy val runEvolutionTask = runEvolution := {
val log = streams.value.log
val dbName = "default"
Run.executeTrapExit( {
log.info(s"Applying evolutions for database $dbName")
Run.run("controllers.ApplyEvolutions",
(fullClasspath in Compile).value.map { _.data },
Seq(dbName),
log
)(runner.value)
}, log )
}
lazy val runEvolutionsBeforeTests = Seq(
Tasks.runEvolutionTask,
(test in Test) <<= (test in …Run Code Online (Sandbox Code Playgroud)