gitlab ci缓存没有匹配的文件

fuz*_*zes 9 gitlab-ci gitlab-ci-runner

我尝试使用gitlabRunner构建APK

当我构建apk时,我不想每次都下载所有构建文件

所以我尝试缓存.gradle / caches和.gradle / wrappers

以下是我的gitlab-ci.yml

sdk_build_job
  image: myimage:latest
  stage: sdk-build
  script:
    ...
  cache:
    key: gradle-cache
      - /root/.gradle/caches
      - /root/.gradle/wrapper
Run Code Online (Sandbox Code Playgroud)

但是创建gradle-cache总是发出警告

Creating cache gradle-cache...
WARNING: /root/.gradle/caches: no matching files       
WARNING: /root/.gradle/wrapper: no matching files      
Archive is up to date!                             
Run Code Online (Sandbox Code Playgroud)

我不知道为什么找不到缓存和包装器目录

当我进入Docker容器并找到文件夹时,位置很好

root@runner-3d9fa57b-project-4-concurrent-0:~/.gradle# pwd
/root/.gradle
root@runner-3d9fa57b-project-4-concurrent-0:~/.gradle# ls -al
total 28
drwxr-xr-x 7 root root 4096 Dec 28 02:21 .
drwx------ 1 root root 4096 Dec 28 02:19 ..
drwxr-xr-x 6 root root 4096 Dec 28 02:20 caches
drwxr-xr-x 3 root root 4096 Dec 28 02:19 daemon
drwxr-xr-x 4 root root 4096 Dec 28 02:19 native
drwxr-xr-x 2 root root 4096 Dec 28 02:21 workers
drwxr-xr-x 3 root root 4096 Dec 28 02:19 wrapper
Run Code Online (Sandbox Code Playgroud)

请帮我.......

MS *_*nds 18

那是因为cache仅适用于项目内部的文件和文件夹。在GitLab网站IMHO上对此的记录很少。

所以:

cache:
  key: gradle-cache
  paths:
    - /root/.gradle/caches
    - /root/.gradle/wrapper
Run Code Online (Sandbox Code Playgroud)

仍然只搜索:

/home/user/yourproject/root/.gradle/caches
/home/user/yourproject/root/.gradle/wrapper
Run Code Online (Sandbox Code Playgroud)

对于R,我将其设置R_LIBS_SITE为项目内的本地文件夹。这使我可以重复使用已安装的软件包。有这里看看

  • 哦,这个警告让我发疯,我在 GitLab 文档中没有找到它。但只有项目文件可以缓存在 CI 管道作业的上下文中是有意义的。谢谢!! (3认同)

Ham*_* C. 5

我在同一个问题上大吃一惊。

MS Berends部分正确。缓存仅适用于项目目录中已存在的文件和文件夹,请参见此处:https : //gitlab.com/gitlab-org/gitlab-ce/issues/4431

应该可以选择将缓存文件夹作为卷安装

[[runners]]
  name = ""
  url = ""
  token = ""
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/root/.gradle:/root/.gradle"]
    shm_size = 0
Run Code Online (Sandbox Code Playgroud)

但这也不起作用

我最终要做的是以下几点:

  1. 在我的.gitlab-ci.yaml中,将GRADLE_USER_HOME设置为指向已映射的缓存卷,例如

    GRADLE_USER_HOME:“ / cache / .gradle”

  2. 然后我将gradle home变量传递给./gradlew

    ./gradlew $ GRADLE_ARGS_CI -g $ GRADLE_USER_HOME testDebugUnitTest

  3. 请注意名为$ GRADLE_ARGS_CI的参数。设置为以下值

    GRADLE_ARGS_CI:“ --no-build-cache --no-daemon --stacktrace”

如果您不想重复使用先前构建的构建输出,则--no-build-cache是​​必需的。--no-daemon毫不费力,因为每次构建都会产生docker构建环境。

通过这些更改,我可以节省2.5分钟的构建时间。