2016-03-31 44 views
1

我正在使用TeamCity运行利用SBT Native Packager将图像发布到Docker的bash脚本。在bash脚本的SBT部分看起来是这样的:将模块版本作为命令行参数发送到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?

回答

4

您可以设置版发布前:

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

谢谢。什么被认为是更正确的这种方法和Andrzejs上面的答案? –

+0

主要区别在于我的方法不需要改变你的构建。他们都是正确的恕我直言。 – kardapoltsev

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