Не публикуйте образ докера для каждого подпроекта SBT.

У меня есть многопроектное приложение SBT/Play2, и мне нужно опубликовать образ Docker для основного проекта (который объединяет остальные).

Проблема в том, что sbt-native-packager публикую в своем локальном репозитории образ для всех проектов PLAY. Корневой образ работает нормально, но у меня есть 2 других изображения, которые не следует публиковать.

Что я добавил в свой plugins.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0-RC1")

А это мой build.sbt

import Dependencies.Library._
import PlayKeys._
import com.typesafe.sbt.packager.docker._

lazy val root = (project in file("."))
  .enablePlugins(PlayScala)
  .enablePlugins(DockerPlugin)
  .settings(
    packageName in Docker := "docking-station",
    version in Docker := "latest",
    NativePackagerKeys.dockerBaseImage := "dockerfile/java:oracle-java8",
    NativePackagerKeys.dockerExposedPorts := Seq(9000, 9443),
    NativePackagerKeys.dockerExposedVolumes := Seq("/opt/docker/logs"),
  )
  .dependsOn(module1).aggregate(module1)
  .dependsOn(module2).aggregate(module2)
  .dependsOn(core).aggregate(core)

lazy val module1 = (project in file("modules/1"))
  .enablePlugins(PlayScala)
  .dependsOn(core)
  .dependsOn(entities)

lazy val module2 = (project in file("modules/2"))
  .enablePlugins(PlayScala)
  .dependsOn(core)

lazy val core = (project in file("modules/core"))

И это то, что я получаю

sbt докер:publishLocal

REPOSITORY                 TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docking-station            latest              0d81792dd1ff        2 seconds ago       873.3 MB
module1                 0.0.1               6d73e3623d2c        3 seconds ago       810.3 MB
module2                0.0.1               c847913663c2        3 seconds ago       809.9 MB

Знаете ли вы, как настроить sbt-native-packager, чтобы не публиковать изображения для этих подпроектов?

Спасибо за вашу помощь :)


person Julien Lafont    schedule 09.03.2015    source источник
comment
Можете ли вы попробовать disablePlugins(DockerPlugin) по подпроектам?   -  person Muki    schedule 10.03.2015
comment
Уже пробовал безуспешно.   -  person Julien Lafont    schedule 10.03.2015
comment
Хм. Я думаю, что PlayPlugin повторно активирует его. Однако опция aggregate будет запускать все команды в подпроектах, несмотря ни на что. Если вы удалите его, образ Docker не будет создан, но задача не будет перенаправлена.   -  person Muki    schedule 11.03.2015


Ответы (2)


Я тоже столкнулся с этой проблемой, и вот решение, которое сработало для меня. Если вы ознакомитесь с документацией по sbt вы можете видеть, что есть настройка для агрегации по задачам. Итак, вы просто устанавливаете агрегацию в false для задач докера. Как это:

lazy val root = (project in file("."))
  .enablePlugins(PlayScala)
  .enablePlugins(DockerPlugin)
  .settings(
    packageName in Docker := "docking-station",
    version in Docker := "latest",
      NativePackagerKeys.dockerBaseImage := "dockerfile/java:oracle-java8",
      NativePackagerKeys.dockerExposedPorts := Seq(9000, 9443),
      NativePackagerKeys.dockerExposedVolumes := Seq("/opt/docker/logs"),
    )
    .dependsOn(module1).aggregate(module1)
    .dependsOn(module2).aggregate(module2)
    .dependsOn(core).aggregate(core)
    .settings(
      aggregate in Docker := false
    )
person Caden Depatie    schedule 09.07.2015

Также нужно было указать dockerRepository для публикации в частном репо.

lazy val dockerSettings = {
val dockerRegistry = "docker.dev.orgul.io"
  Seq(
   dockerBaseImage := dockerRegistry + "/java-alpine:latest",
   dockerRepository := Some(dockerRegistry),

...

person SemanticBeeng    schedule 13.01.2017