我正在尝试使用spring boot 2.3的新支持来创建docker镜像,但是bootBuildImage
gradle任务从来都不是最新的。不幸的是,即使没有更改源代码,这也会导致生成新的docker映像。
我的目标是拥有一个静态构建命令,该命令不会导致不必要地生成新图像。因此,类似于以下两种情况之一:
./gradlew bootBuildImage (but does nothing if no source code has changed)
OR
./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
}
}
}
但这会因该错误而失败(由于某些原因,此特定任务讨厌jars作为输入)
> 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。
答案 0 :(得分:0)
这似乎可行:
val bootJarTask: TaskProvider<BootJar> = this.bootJar
bootBuildImage {
onlyIf {
!bootJarTask.get().state.skipped
}
}