【问题标题】:How to use single input for multiple dependent input task如何将单个输入用于多个依赖输入任务
【发布时间】:2015-08-28 04:08:14
【问题描述】:

我有一个问题,我已经连续处理了大约两天,但没有运气。我有两个任务,打包和部署,它们都根据部署到的环境而变化。我使用 sbt-native-packager 插件进行打包,使用 sbt-deploy-ssh 进行部署。

我的包任务被这样的 inputTask 调用: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

我的部署任务被一个 inputTask 调用,如下所示:deployTo "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(" "))
}

我可以单独运行这两个,但我希望部署任务依赖于包任务。我想要做的是运行 deployTo 并将提供的环境也传递给包任务。

到目前为止,我运气不佳,因为我不断收到“非法动态引用错误”,即使包和部署任务都是 Def.inputTaksDyn

【问题讨论】:

    标签: sbt


    【解决方案1】:

    Your case is described here.

    只需将您的环境添加到deployConfigs

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

    将工件添加到deployArtifacts

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

    并使用deploySsh 开始部署。

    deploySsh yourServerName1 yourServerName2 ...
    

    【讨论】:

      猜你喜欢
      • 2018-11-07
      • 2020-01-02
      • 2011-06-12
      • 2022-08-05
      • 2017-09-09
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多