gitlab ci缓存没有匹配的文件

时间:2018-12-28 02:44:13

标签: 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

但是创建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!                             

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

当我进入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

请帮助我.......

3 个答案:

答案 0 :(得分:10)

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

所以:

cache:
  key: gradle-cache
  paths:
    - /root/.gradle/caches
    - /root/.gradle/wrapper

仍然仅在以下位置搜索

/home/user/yourproject/root/.gradle/caches
/home/user/yourproject/root/.gradle/wrapper

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

答案 1 :(得分:3)

在同一个问题上,我全神贯注。

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

但是无效

我最终要做的事情如下:

  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分钟的构建时间。

答案 2 :(得分:-1)

cache:
  paths:
    - .nuget

before_script:
  - dotnet --version
  - "[ -f .nuget/NuGet/NuGet.Config ] && rm -rf $HOME/.nuget || rsync -a $HOME/.nuget ./"
  - ln -s $(pwd)/.nuget $HOME/.nuget