我正在尝试使用 spring boot 2.3 对创建 docker 映像的新支持,但bootBuildImagegradle 任务永远不会是最新的。不幸的是,即使没有更改源代码,也会生成一个新的 docker 映像。
我的目标是拥有一个不会导致不必要地生成新图像的静态构建命令。所以类似于以下两种情况之一:
./gradlew bootBuildImage (but does nothing if no source code has changed)
或者
./gradlew someOtherTask (if this task is not up-to-date, it triggers bootBuildImage)
我最近的努力是将 bootBuildImage 配置为仅在 bootJar 任务不是最新的情况下运行:
tasks {
val bootJarTask: TaskProvider<BootJar> = this.bootJar
bootBuildImage {
outputs.upToDateWhen {
bootJarTask.get().state.upToDate
}
}
}
但是这个错误失败了(由于某种原因,这个特定的任务讨厌罐子作为输入)
> Unable to store input properties for task ':bootBuildImage'. Property 'jar' with value '/demo/build/libs/demo-0.0.1-SNAPSHOT.jar' cannot be serialized.
当然,我在这里遗漏了一些明显的东西!我需要 bootBuildImage 仅在必要时生成映像的原因是因为我有一个多项目构建。我不希望子项目生成和推送新图像,即使它们没有任何变化。
使用 Spring Boot 2.3.4、Gradle 6.6.1、Java 11。