0

我正在尝试使用 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。

4

1 回答 1

0

这似乎有效:

    val bootJarTask: TaskProvider<BootJar> = this.bootJar
    
    bootBuildImage {
        onlyIf {
            !bootJarTask.get().state.skipped
        }
    }
于 2020-09-24T14:12:01.967 回答