#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