2016-03-31 2 views
1

Я использую TeamCity для запуска сценария bash, использующего встроенный пакет Packet SBT для публикации изображения в Docker. 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 

, но это не похоже на работу. И все же переопределение докерера, как я делаю выше, работает.

Как передать номер моей желаемой версии в SBT из командной строки/TeamCity?

ответ

4

Вы можете установить версия до публикации:

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

Спасибо. Что считается более правильным из этого подхода, и Анджейс отвечает выше? –

+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

Смежные вопросы