当我缓存构建目录时,为什么 Gradle 会在 GitLab CI 上重新运行最新的测试?

mog*_*lol 7 gradle gitlab gitlab-ci-runner

我有以下多项目 gradle 文件的构建配置:

stages:
  - test

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle

cache:
  paths:
    - .gradle/wrapper
    - .gradle/caches
    - build

test :
  dependencies: []
  image: openjdk:x
  stage: test
  script:
      - ./gradlew test --debug
Run Code Online (Sandbox Code Playgroud)

在 GitLab 上,在不更改源文件的构建之间,我得到:

Up-to-date check for task ':x:compileJava' took 1.117 secs. It is not up-to-date because:
No history is available.
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它这么说,因为我希望任务历史记录能够从缓存中恢复。我在运行之间的日志中看到这一点:

Creating cache default...
.gradle/wrapper: found 207 matching files          
.gradle/caches: found 5058 matching files          
build: found 2743 matching files
Run Code Online (Sandbox Code Playgroud)

当我在本地计算机上重新运行时,我可以看到测试没有重新运行:

> Skipping task ':x:compileJava' as it is up-to-date (took 0.008 secs).
Run Code Online (Sandbox Code Playgroud)

更令人困惑的是依赖项被完美缓存,当我没有进行任何代码更改时它只是不断重新运行测试。

小智 1

据我所知,gradle 丢失的历史记录也存储在 .gradle 文件夹中,但不存储在缓存或包装器子文件夹中。如果你告诉 Gitlab 缓存完整的 .gradle 文件夹,问题就会消失。

另请参阅此示例: https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Gradle.gitlab-ci.yml