web-dev-qa-db-ja.com

gitlab ciは一致するファイルをキャッシュしません

Gitlab runnerで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

私を助けてください.......

9
fuzes

これは、cacheはプロジェクト内のファイルとフォルダーに対してのみ機能するためです。これは、GitLabのWebサイト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をプロジェクト内のローカルフォルダーに追加します。これにより、インストール済みのパッケージを再利用できました。 こちらをご覧ください

17
MS Berends

同じ問題で頭を打ちました。

MSベレンズは部分的に正しい。キャッシュは、プロジェクトディレクトリ内のファイルとフォルダーに対してのみ機能することになっています。以下を参照してください。 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ホーム変数を./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が必要です。ビルドごとにdockerビルド環境が生成されるため、--no-daemonは簡単です。

これらの変更により、ビルド時間を2.5分節約できました。

5
Hamady C.