2016-03-31 56 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