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

Send module version as command line argument to SBT

我正在使用 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 是有效的。

如何通过命令 line/TeamCity 将我想要的版本号传递到 SBT?

尝试这样的事情:

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

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

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