我有一个问题,我已经连续两天没有运气了。我有两个任务,包和部署,它们都会根据所部署的环境而改变。我使用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并将提供的env传递给包任务。
到目前为止,我没有太多运气,因为我一直收到“非法动态参考错误”,即使包和部署任务都是Def.inputTaksDyn
答案 0 :(得分:0)
只需将您的环境添加到deployConfigs
deployConfigs ++= Seq(
ServerConfig("env", "169.254.0.2")
)
将工件添加到deployArtifacts
deployArtifacts ++= Seq(
ArtifactSSH((packageBin in config("universal")).value, "/tmp/")
)
并使用deploySsh
开始部署。
deploySsh yourServerName1 yourServerName2 ...