GoogleContainerTools / GoogleContainerTools/skaffold

When using gradle builder unit tests are not executed.

Open
#7,086 1 comment 0 reactions 0 assignees View on GitHub
area/build build/jib help wanted java kind/enhancement priority/p2
Dominant language
Go
Stars
15.9k
Forks
1.7k
Avg merge
3d 9h
Merged PRs (30d)
10

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:

```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`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.