【问题标题】:Gradle caching doesn't work with GitLab-CIGradle 缓存不适用于 GitLab-CI
【发布时间】:2019-03-03 19:04:39
【问题描述】:

我正在尝试使用缓存机制,但它不起作用,我尝试了不同的尝试,但它们似乎都不适合我。列出的任务在我的机器上大约需要 75 秒,在 gitlab ci 上大约需要 5-6 分钟,运行者在每个管道中再次下载依赖项。

问题是如何用gitlab ci缓存下载的deps?

image: dockerregistry.my-image:1.0.0
variables:
  GIT_SUBMODULE_STRATEGY: normal
  GRADLE_USER_HOME: $CI_PROJECT_DIR/.gradle

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

before_script:
  - echo `pwd`
  - echo `$CI_PROJECT_DIR`
  - rm -f  .gradle/caches/modules-2/modules-2.lock
  - rm -fr .gradle/caches/*/plugin-resolution/

build:
  stage: build
  script:
    - ./gradlew assemble

junit:
  stage: test
  script:
     - ./gradlew test

谢谢

更新

执行者:Kubernetes
Gitlab版本:11.0.x

Submodule path 'my-other-application': checked out 'fxxxx1'
Checking cache for default...
Successfully extracted cache

.........

Running after script...
$ echo "End CI"
End CI
Creating cache default...
.gradle/wrapper: found 222 matching files          
.gradle/caches: found 8474 matching files     

 

【问题讨论】:

  • Gitlab CI 中的缓存可能是一个真正的痛苦......您能否编辑您的问题以包括:日志中关于缓存的内容(通常在每个作业的开头)是什么?您使用的是什么类型的执行器(shell、vbox、...)?
  • @MaximilianC。我已经更新了原帖。奇怪的是,这项工作正在提取缓存,但它仍然下载 Internet/Intranet (nexus)。
  • 嗯。我没有使用过这种 executor 类型(知道它的怪癖)也没有 gradle ......在你之前的脚本中,你能否添加一些东西来让你了解文件夹是否被正确填充:例如列出所有文件stackoverflow.com/questions/2437452/…(显然,这将是太多的文件,不能在这里发布它们:D)
  • 你确定之前的脚本没有删除你的缓存吗?

标签: java caching gradle gitlab-ci


【解决方案1】:

我正在使用 docker executor 并且正在工作:

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

使用 docker,缓存存储在容器中,所以如果我运行 docker system prune 之类的东西并清除未运行的容器,缓存就会丢失。

我不知道 Kubernetes 是如何工作的,可能容器在执行结束时会被删除。

->https://gitlab.com/gitlab-org/gitlab-runner/issues/1906

【讨论】:

猜你喜欢
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 2022-07-27
  • 1970-01-01
相关资源
最近更新 更多