5

Mam aplikację SBT/Play2 z wieloma projektami i muszę opublikować obraz Docker dla głównego projektu (który agreguje pozostałe).Nie publikuj obrazu dokowanego dla każdego podprojektu SBT

Problem polega na tym, że sbt-native-packager publikuje w moim lokalnym repo obraz dla wszystkich projektów PLAY. Obraz główny działa dobrze, ale mam 2 inne obrazy, które nie powinny być publikowane.

Co Dodałem w moim plugins.sbt

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

A to moja 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")) 

A to co mam

SBT docker: opublikowaćLokalny

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 

Czy wiesz, jak skonfigurować sbt-native-packager, aby nie publikować obrazu dla tych podprojektów?

Dzięki za pomoc :)

+0

możesz spróbować 'disablePlugins (DockerPlugin)' na podprojekty? – Muki

+0

Próbowano już bez powodzenia. –

+0

Hm. Myślę, że PlayPlugin reaktywuje go. Opcja 'aggregate' uruchomi jednak wszystkie polecenia na podprojektach, bez względu na wszystko. Jeśli go usuniesz, obraz dokowania nie powinien być budowany, ale żadne zadanie nie zostanie przekazane. – Muki

Odpowiedz

8

po prostu wpadł na ten problem, jak również i tu jest rozwiązanie, że pracował dla mnie. Jeśli sprawdzisz numer sbt documentation, zobaczysz, że istnieje ustawienie agregacji na zadanie. Po prostu ustawiasz agregację na wartość false dla zadań dokujących. W ten sposób:

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 
    ) 
0

Musi również podać numer dockerRepository do opublikowania na prywatnym repozytorium.

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

...

Powiązane problemy