创建一个覆盖一些Docker设置的配置,同时保持docker:publish行为

时间:2016-02-24 16:59:19

标签: sbt sbt-native-packager

我正在尝试创建一个可以将Docker容器发布到DockerHub或我们的内部Docker存储库的SBT构建。我使用sbt-native-packager 1.0.3构建Docker镜像。

这是我的build.sbt的摘录:

dockerRepository in dockerInternal := Some("thomaso"),
packageName in dockerInternal := "externalname",

sbt docker:publish现在已成功发布到DockerHub上的thomaso / externalname。

要添加发布到我们内部Docker仓库的选项,我添加了一个名为dockerInternal的配置:

val dockerInternal = config("dockerInternal") extend Docker

然后我添加了这两个设置来覆盖默认值:

dockerRepository in Docker := Some("docker.nrk.no/project"),
packageName in Docker := "internalname",

我的期望是sbt dockerInternal:publish应该将Docker镜像发布到docker.nrk.no/project/internalname。相反,我收到此错误消息:

delivering ivy file to   /home/n06944/repos/nrk.recommendations/api/target/scala-2.10/ivy-0.1-  SNAPSHOT.xml
java.lang.RuntimeException: Repository for publishing is not specified.

在我看来,SBT试图发布到Ivy,而不是Docker - 当我将值硬编码到内部仓库时,发布工作正常,日志中没有提到常春藤。 Docker配置修改了发布任务,我希望通过让dockerInternal扩展Docker,我将继承Docker特定的发布行为。这是一个不正确的假设吗?我错过了一些咒语,还是有其他方法会更好?

1 个答案:

答案 0 :(得分:0)

您忘记将所有必要的任务导入新配置。 sbt-native-packager建议为不同的打包配置生成子模块。

如果你想摆弄配置范围(速度非常快)here is another SO answer I gave

欢呼声, 缪奇