GoogleContainerTools/skaffold

When using gradle builder unit tests are not executed.

Open

#7,086 建立於 2022年2月8日

在 GitHub 查看
 (1 留言) (0 反應) (0 負責人)Go (12,822 star) (1,416 fork)batch import
area/buildbuild/jibhelp wantedjavakind/enhancementpriority/p2

描述

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.

貢獻者指南

When using gradle builder unit tests are not executed. · GoogleContainerTools/skaffold#7086 | Good First Issue