Do not publish docker image for each SBT subproject

I have a multi-project SBT / Play2 application, and I need to publish a Docker image for the main project (which integrates the rest).

The problem is that sbt-native-packager publish in my local repo image for all PLAY projects. The root image works fine, but I have 2 more images that should not be published.

What I added to my plugins.sbt

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

And this is my 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")) 

And this is what I get

sbt docker: 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 

Do you know how to configure sbt-native-packager to not publish an image for these subprojects?

Thanks for your help:)

+5
source share
2 answers

I just ran into this problem, and here is a solution that worked for me. If you look at the sbt documentation , you will see that a setting is set for each task. That way, you just set aggregation to false for docker tasks. Like this:

 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 ) 
+8
source

It was also necessary to specify dockerRepository for publication in a private repo.

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

...

0
source

Source: https://habr.com/ru/post/1215001/


All Articles