Параметризует SBT DockerPlugin из командной строки

#scala #docker #sbt

#scala #docker #sbt

Вопрос:

Я использую SBT для создания приложения Scala, и мы используем DockerPlugin для выполнения фактической сборки. Конфигурация выглядит примерно так:

  .enablePlugins(PlayScala, PlayAkkaHttp2Support, DockerPlugin)
  .in(...)
  .settings(name := "...")
  .settings(version := VERSION)
  ...
  .settings(dockerUpdateLatest := true)
  

Итак, я запускаю sbt docker:publish с нашего сервера CI (в данном случае CircleCI). Но это создает и публикует версию в нашем репозитории Docker. Дело в том, что мы запускаем это как develop снова, так и master снова. Разработка получает суффикс -SNAPSHOT , но оба отправляют свой версионный образ Docker в качестве последнего тега.

И это последнее, чего я не хочу, для master я хочу создать сборку (например, 1.5.3 и установить ее до последней версии (потому что это моя последняя стабильная версия)), но не для разработки. Итак, я думал установить .settings(dockerUpdateLatest := false) значение не для автоматического обновления последней версии, но затем в моей master сборке настройте что-то в командной строке для запуска / изменения этого параметра.

Возможно ли это, и может кто-нибудь сказать мне, как или где искать?

Спасибо!

Ответ №1:

Вы можете использовать системное свойство Java.

 dockerUpdateLatest :=
  sys.props.getOrElse("myproject.dockerUpdateLatest", "false").toBoolean
  

Затем вы запускаете sbt следующим образом:
sbt -J-Dmyproject.dockerUpdateLatest=true docker:publish

Но я думаю, что более элегантным решением является просто проверить, является ли версия, которую вы создаете, версией моментального снимка.

 dockerUpdateLatest := ! isSnapshot.value