When using gradle builder unit tests are not executed.
#7,086 opened on Feb 8, 2022
Description
Expected behavior
When using gradle as a builder skaffold should issue gradle test jibDockerBuild instead of just gradle jibDockerBuild to run unit tests before building container unless --skip-tests flag is passed.
Actual behavior
skaffold issues gradle jibDockerBuild command and that doesn't run tests.
There's a partial workaround to add jibDockerBuild.dependsOn test to build.gradle, however in a multiproject setup, this will only run tests on the project that applies jib plugin. If such project depends on another project from the multiproject build, then the tests of that dependent project will not be run. Hence, there seems not to be a way of running all unit tests in multiproject setup which seems to be one of core features of a CI/CD pipeline.
Information
- Skaffold version: 1.35.2
- Operating system: Linux
- Installed via: skaffold.dev
- Contents of skaffold.yaml:
apiVersion: skaffold/v2beta10
kind: Config
metadata:
name: back-end
build:
artifacts:
- image: serviceA
jib:
project: serviceA
type: gradle
- image: serviceB
jib:
project: serviceB
type: gradle
Steps to reproduce the behavior
having a multipoject gradle setup issue skaffold build, skaffold run, skaffold debug or skaffold dev command.
$ skaffold dev
[...]
> Task :serviceA:_skaffoldFailIfJibOutOfDate
> Task :serviceB:_skaffoldFailIfJibOutOfDate
> Task :dependent-project:generateMainEffectiveLombokConfig1
> Task :dependent-project:compileJava UP-TO-DATE
> Task :dependent-project:processResources NO-SOURCE
> Task :dependent-project:classes UP-TO-DATE
> Task :dependent-project:jar UP-TO-DATE
> Task :serviceB:generateMainEffectiveLombokConfig1
> Task :serviceB:compileJava UP-TO-DATE
> Task :serviceB:processResources UP-TO-DATE
> Task :serviceB:classes UP-TO-DATE
> Task :serviceB:jibDockerBuild
The above output show part of skaffold log for building image for serviceB. No test task are run.
If you add jibDockerBuild.dependsOn test in serviceB build.gradle then this is the relevant output:
$ skaffold dev
[...]
> Task :serviceA:_skaffoldFailIfJibOutOfDate
> Task :serviceB:_skaffoldFailIfJibOutOfDate
> Task :dependent-project:generateMainEffectiveLombokConfig1
> Task :dependent-project:compileJava UP-TO-DATE
> Task :dependent-project:processResources NO-SOURCE
> Task :dependent-project:classes UP-TO-DATE
> Task :dependent-project:jar UP-TO-DATE
> Task :serviceB:generateMainEffectiveLombokConfig1
> Task :serviceB:compileJava UP-TO-DATE
> Task :serviceB:processResources UP-TO-DATE
> Task :serviceB:classes UP-TO-DATE
> Task :serviceB:generateTestEffectiveLombokConfig1
> Task :serviceB:compileTestJava
> Task :serviceB:processTestResources NO-SOURCE
> Task :serviceB:testClasses
> Task :serviceB:test
> Task :serviceB:jibDockerBuild
you can see that now tests for serviceB are run, but not for dependent-project that serviceB declares as its dependency in its build.gradle.