通过SSH在SBT任务中执行shell脚本

时间:2013-12-09 12:50:55

标签: ssh sbt

找不到任何关于此的信息,这可能吗?我只需要在发布任务后执行像systemctl restart project这样的小命令。

2 个答案:

答案 0 :(得分:6)

我在my tests执行此操作。然而,那里有一些奇怪的输出东西来捕捉失败。

基本要点是sbt提供process API,其中eventualyl成为Scala核心库的一部分。

以下是一个例子:

val restartSystemService = taskKey[Unit]("restarts stuff")

restartSystemService := {
  val logger = streams.value.log
  Process("systemctrl restart project") ! logger match {
    case 0 => // Success!
    case n => sys.error(s"Could not restart the project, exit code: $n")
  }
}

答案 1 :(得分:3)

好的,我找到了一个小型库 - scala-ssh,要使它在.scala构建定义中可用,我们需要将此依赖项添加到project/build.sbt文件中,以便我们可以定义此类任务:

val restart = taskKey[Unit]("restart")

restart := {
  SSH(host, config) { client =>
    client.exec("systemctl restart project")
  }
}