кеш gitlab ci нет подходящих файлов - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь собрать apk с помощью gitlab runner

Когда я собираю apk, я не хочу загружать все сборки pacakage каждый раз

, поэтому я пытаюсь кэшировать .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 всегда выдает предупреждение

Creating cache gradle-cache...
WARNING: /root/.gradle/caches: no matching files       
WARNING: /root/.gradle/wrapper: no matching files      
Archive is up to date!                             

Я не знаю, почему могуне могу найти каталог с кешами и оболочкой

Когда я вошел в докер-контейнер и нашел папки, они были хорошо расположены

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

Пожалуйста, помогите мне .......

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Я ударился головой об этой же проблеме.

М.С. Берендс частично прав.Предполагается, что кэширование работает только для файлов и папок, уже находящихся в каталоге вашего проекта, см. Здесь: 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. Затем я передал эту переменную home gradle в./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 минуты времени на сборку.

0 голосов
/ 04 января 2019

Это потому, что cache работает только для файлов и папок ВНУТРИ вашего проекта.Это плохо документировано на сайте GitLab ИМХО.

Итак:

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 для локальной папки внутри моего проекта.Это позволило мне повторно использовать установленные пакеты. посмотрите здесь .

...