GoogleContainerTools / jib

🏗 Build container images for your Java applications.
Apache License 2.0
13.52k stars 1.42k forks source link

Gradle configuration cache support #4202

Closed artemptushkin closed 3 months ago

artemptushkin commented 4 months ago

Environment:

Description of the issue:

The job task fails running if configuration cache is enabled, regardless or the warnings, i.e. in warn enabled we expect it to be logged but not error should be.

If with the same configuration you switch back the configuration cache to false it works.

The core error:

Cannot invoke "org.gradle.api.Project.getProjectDir()" because "this.project" is null

Expected behavior:

The build passes if no unrelated issues

Steps to reproduce:

  1. Enable Gradle configuration cache with warn:
# gradle.properties

org.gradle.configuration-cache=true
org.gradle.configuration-cache.problems=warn
  1. Run jib task e.g. ./gradlew jib

jib-gradle-plugin Configuration:

jib {
    container {
        mainClass = "x.y.z.FooKt"
    }
    from {
        image = "eclipse-temurin:21-jre"
    }
}

Log output:

> Task :distribution:jib FAILED
10 problems were found storing the configuration cache, 2 of which seem unique.
- Task `:distribution:jib` of type `com.google.cloud.tools.jib.gradle.BuildImageTask`: cannot deserialize object of type 'org.gradle.api.Project' as these are not supported with the configuration cache.
  See https://docs.gradle.org/8.6/userguide/configuration_cache.html#config_cache:requirements:disallowed_types
- Task `:distribution:jib` of type `com.google.cloud.tools.jib.gradle.BuildImageTask`: cannot serialize object of type 'org.gradle.api.internal.project.DefaultProject', a subtype of 'org.gradle.api.Project', as these are not supported with the configuration cache.
  See https://docs.gradle.org/8.6/userguide/configuration_cache.html#config_cache:requirements:disallowed_types
See the complete report at file:///builds/foo/build/reports/configuration-cache/kuk15qcl6k2hj0snqht5et0a/3kly9i8hjlwaqpdaqa3d2z42e/configuration-cache-report.html
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':distribution:jib'.
> Cannot invoke "org.gradle.api.Project.getProjectDir()" because "this.project" is null

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':distribution:jib'.
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314)
        at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.AbstractManagedExecutor$1.run(AbstractManagedExecutor.java:47)
Caused by: java.lang.NullPointerException: Cannot invoke "org.gradle.api.Project.getProjectDir()" because "this.project" is null
        at com.google.cloud.tools.jib.gradle.ExtraDirectoriesParameters.getPaths(ExtraDirectoriesParameters.java:86)
        at com.google.cloud.tools.jib.gradle.ExtraDirectoriesParameters_Decorated.getPaths(Unknown Source)
        at com.google.cloud.tools.jib.gradle.ExtraDirectoriesParameters.getPathStrings(ExtraDirectoriesParameters.java:65)
        at com.google.cloud.tools.jib.gradle.ExtraDirectoriesParameters_Decorated.getPathStrings(Unknown Source)

Additional information

Another day I created an issue in Gradle but they closed it with the documentation update because the failure is only in the plugin itself and unrelated to Gradle

sschuberth commented 3 months ago

Duplicate of https://github.com/GoogleContainerTools/jib/issues/3132? (Which interestingly has a different priority than this issue.)

artemptushkin commented 3 months ago

@sschuberth yes indeed, it's a duplicate

closing in favour of https://github.com/GoogleContainerTools/jib/issues/3132