如何将单个输入用于多个依赖性输入任务



我有一个问题,我已经连续两天努力,没有运气。我有两个任务,包装和部署,这两个任务都取决于所部署到的环境。我正在使用sbt-native-packager插件进行包装和SBT-Deploy-SSH进行部署。

我的软件包任务是由这样的输入任务称为:bundle" env"

lazy val setEnv : Def.Initialize[InputTask[String]] = Def.inputTask {
  sbt.Def.spaceDelimited("<arg>").parsed(0)
}
lazy val configure : Def.Initialize[InputTask[String]] = Def.inputTask {
val env = setEnv.evaluated
  writeConfig(env)
  env
}
lazy val bundle = inputKey[Unit]("bundles project for specific env")
bundle := configure.parsed.flatMap { _ =>
  (packageBin in config("universal")).taskValue
}.value

我的部署任务是由这样的输入任务来调用的:decloyto" env"

val deployTo = inputKey[Unit]("Deploys to specific env")
deployTo := Def.inputTaskDyn {
  val args = sbt.Def.spaceDelimited("<args>").parsed
  deployWithDynamicServers(getServers(args(0)))
}.evaluated
def deployWithDynamicServers(servers: Seq[String]) = Def.taskDyn {
  deploySsh.toTaks(" " + servers.mkString(" "))
}

我可以单独运行这两个,但是我希望部署任务取决于软件包任务。我想做的就是运行部署,并将提供的ENV传递给软件包任务。

到目前为止,我还没有很多运气

您的情况在此处描述。

只需将您的env添加到deployConfigs

deployConfigs ++= Seq(
    ServerConfig("env", "169.254.0.2")
)

将工件添加到deployArtifacts

deployArtifacts ++= Seq(
    ArtifactSSH((packageBin in config("universal")).value, "/tmp/")
)

并开始使用deploySsh

deploySsh yourServerName1 yourServerName2 ...

最新更新