将模块版本作为命令行参数发送到SBT

时间:2016-03-31 08:17:51

标签: scala sbt sbt-native-packager

我正在使用TeamCity运行一个bash脚本,该脚本利用SBT Native Packager将图像发布到Docker。 bash脚本的sbt部分看起来像这样:

sbt -DdockerRepository=$repo -DpackageName=$packageName -D myproject/docker:publish

我想将TeamCity内部版本号作为版本号传递给我的包。今天我在build.sbt:

的设置中手动指定版本号
settings(
  version := "0.20",
  ....,
  dockerBaseImage := "example.com:5000/linux/java8:latest",
  dockerRepository in Docker := Some("example.com/myoldrepo"),
  dockerUpdateLatest := true'
)

我希望能够这样做:

activator -Dversion=0.21 -DpackageName=myproject -D myproject/docker:publish

但这似乎不起作用。然而,就像我上面那样重写dockerRepository是有效的。

如何从命令行/ TeamCity将所需的版本号传递到SBT?

2 个答案:

答案 0 :(得分:8)

您可以在发布前设置版本:

sbt 'set version := "1.0"' docker:publish

答案 1 :(得分:2)

尝试这样的事情:

val myVersion = util.Properties.propOrNone("version").getOrElse("0.20")

val myDockerBaseImage = util.Properties.propOrNone("dockerBaseImage").
                    getOrElse("example.com:5000/linux/java8:latest")

lazy val myProject = Project("myProject",file("path")).settings(
  version := myVersion,
  dockerBaseImage := myDockerBaseImage,
  ....,
  dockerRepository in Docker := Some("example.com/myoldrepo"),
  dockerUpdateLatest := true
)

然后调用它(取决于你的sbt安装):

SBT_OPTS="-Dversion=0.21" sbt

sbt -Dversion=0.21

activator -Dversion=0.21

相关问题