我尝试使用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
请帮助我.......
答案 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
但是无效。
我最终要做的事情如下:
在我的.gitlab-ci.yaml中,将GRADLE_USER_HOME设置为指向已映射的缓存卷,例如
GRADLE_USER_HOME:“ / cache / .gradle”
然后我将gradle home变量传递给./gradlew,如
./ gradlew $ GRADLE_ARGS_CI -g $ GRADLE_USER_HOME testDebugUnitTest
请注意名为$ 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