2014-11-03 9 views
11

Я пытаюсь кэшировать зависимости для частного репозитория CSR Travis, есть ли у Travis какой-то механизм, специфичный для gradle, или мне нужно кэшировать определенные каталоги?Cache gradle dependencies, Travis CI

.travis.yml:

language: groovy 

jdk: 
    - openjdk7 

env: 
- TERM=dumb 

before_install: 
- cd application 
- chmod +x gradlew 

script: 
- ./gradlew build 

Соответствующие части последнего рабочего билда:

Downloading https://services.gradle.org/distributions/gradle-2.1-bin.zip 

...................................................................................................................................................................................... 

Unzipping /home/travis/.gradle/wrapper/dists/gradle-2.1-bin/2pk0g2l49n2sbne636fhtlet6a/gradle-2.1-bin.zip to /home/travis/.gradle/wrapper/dists/gradle-2.1-bin/2pk0g2l49n2sbne636fhtlet6a 

Set executable permissions for: /home/travis/.gradle/wrapper/dists/gradle-2.1-bin/2pk0g2l49n2sbne636fhtlet6a/gradle-2.1/bin/gradle 

Download https://jcenter.bintray.com/com/mycila/xmltool/xmltool/3.3/xmltool-3.3.pom 

... 

бы добавляющие:

cache: 
    directories: 
    - $HOME/.gradle 

работу? или, возможно:

cache: 
    directories: 
    - $HOME/.gradle/caches/modules-2/files-2.1 
+2

https://docs.travis-ci.com/user/languages/java/#Projects-Using-Gradle – gliptak

ответ

6

Вы должны кэшировать по крайней мере ~/.gradle/wrapper и ~/.gradle/caches, но я бы, вероятно, начать с ~/.gradle. (При необходимости местоположение последнего можно изменить, установив переменную окружения GRADLE_USER_HOME). При обновлении до более новой версии Gradle структура кэша может измениться, поэтому имеет смысл время от времени аннулировать кеш.

PS: Пожалуйста, не заходите сюда и на форумы Gradle (либо все в порядке).

6

Возможно, вы должны добавить sudo: false в ваш .travis.yml, так как кэширование недоступно для общедоступных хранилищ. Это предотвратит использование sudo, setid, setgid, но это позволяет использовать механизм кеширования!

Но я обнаружил, что кеширование $HOME/.gradle/caches не очень хороший вариант, потому что файл $HOME/.gradle/caches/modules-2/modules-2.lock изменяется каждый сбор, поэтому Travis будет перепаковывать кеш каждый раз и делать полную загрузку этого кеша. Это медленнее для меня, чем загрузка всех моих зависимостей. Так что, может быть, лучше указать что-то еще, чем $HOME/.gradle/caches.

+2

Это не совсем ответ, он просто отмечает, что ~/.gradle/кэшей не хороший ответ :( – dequis

3

Я добавил следующие папки:

- $HOME/.gradle/wrapper 
- $HOME/.gradle/native 
- $HOME/.gradle/daemon 
- $HOME/.gradle/caches/jars-1 
- $HOME/.gradle/caches/2.3 

Добавление .gradle/кэши создаст новый файл кэша все сборки. Не забудьте изменить 2.3 на свою версию градиента.

+0

вы можете показать полный travis.yml? – Caipivara

+0

Конечно, проверьте это, например: https://github.com/uphold/uphold-sdk-android/blob/master/.travis.yml –

2

Вы просто должны добавить следующие строки в ваш .travis.yml:

before_cache: 
    - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock 
cache: 
    directories: 
    - $HOME/.gradle/caches/ 
    - $HOME/.gradle/wrapper/ 

Вы можете получить более подробную информацию here.

1

В версии 3.5.1 самый простой и самый эффективный способ, это просто кэш каталога caches/modules-2 и caches/wrapper. Кэширование всего каталога caches добавляет слишком много файлов и вызывает большую задержку. Вам все равно необходимо удалить файл modules-2.lock.

before_cache: 
    - rm -rf $HOME/.gradle/caches/modules-2/modules-2.lock 
cache: 
    - $HOME/.gradle/caches/modules-2 
    - $HOME/.gradle/wrapper/