2016-01-08 29 views
6

我发现每次Travis CI构建项目时,都必须再次下载所有SDK包,例如平台工具,支持库,当前SDK等。为什么Travis CI会在每次构建时下载所有内容?

是否可以避免它,让Travis重复使用它第一次下载的内容?

我大概是在我的.travis.yml文件中犯了一些错误,这里是

language: android 
android: 
    components: 
    # Uncomment the lines below if you want to 
    # use the latest revision of Android SDK Tools 
    - platform-tools 
    - tools 

    # The BuildTools version used by your project 
    - build-tools-23.0.2 

    # The SDK version used to compile your project 
    - android-23 

    # Additional components 
    - extra-android-support 
    - extra-google-google_play_services 
    - extra-google-m2repository 
    - extra-android-m2repository 
    - addon-google_apis-google-19 

    # Specify at least one system image, 
    # if you need to run emulator(s) during your tests 
    # - sys-img-armeabi-v7a-android-19 
    # - sys-img-x86-android-17 

script: 
    - ./gradlew check 
    - ./gradlew test --continue 
    # - ./gradlew build connectedCheck 
+0

我也有同样的问题。我认为它是因为android支持是beta版本。 –

+1

此问题发布在这里https://github.com/travis-ci/travis-ci/issues/4065 –

回答

0

为什么特拉维斯CI下载的一切每次构造时间的副本?

我们谈到here,Travis-ci从S3下载缓存,所以没有显着的速度提升缓存Android SDK等大文件。

如何在Travis-ci缓存中包含Android SDK? (不推荐)

相关位在这里,你可以添加到缓存中你喜欢的任何文件,并知道他的路径:

cache: 
    directories: 
    - ${TRAVIS_BUILD_DIR}/gradle/caches/ 
    - ${TRAVIS_BUILD_DIR}/gradle/wrapper/dists/ 
    - ${TRAVIS_BUILD_DIR}/android-sdk/extras/ # please don't include sys-images 

我做了很久以前,你可以看到代码in the link shared by @nicolas-f

language: android 
jdk: oraclejdk8 
env: 
    global: 
    - GRADLE_USER_HOME=${TRAVIS_BUILD_DIR}/gradle 
    - ANDROID_HOME=${TRAVIS_BUILD_DIR}/android-sdk 
    - SDK=${TRAVIS_BUILD_DIR}/android-sdk 
    - PATH=${GRADLE_USER_HOME}/bin/:${SDK}/:${SDK}/tools/:${SDK}/platform-tools/:${PATH} 
before_install: 
    - export OLD_SDK=/usr/local/android-sdk-24.0.2; 
              mkdir -p ${SDK}; 
              cp -u -R ${OLD_SDK}/platforms ${SDK}/platforms; 
              cp -u -R ${OLD_SDK}/system-images ${SDK}/system-images; 
              cp -u -R ${OLD_SDK}/tools ${SDK}/tools 

cache: 
    apt: true 
    directories: 
    - ${TRAVIS_BUILD_DIR}/gradle/caches/ 
    - ${TRAVIS_BUILD_DIR}/gradle/wrapper/dists/ 
    - ${TRAVIS_BUILD_DIR}/android-sdk/extras/ 
android: 
    components: 
    # Update Android SDK Tools 
    - tools 
    - platform-tools 
    - build-tools-23.0.2 
    - android-23  
    - add-on 
    - extra 

script: 
    - ./gradlew check 

使用ls确认SDK路径没有改变另一次。

目前没有必要移动SDK,并且您需要更新其他东西,或者在platform-tools之后添加另一个tools,此代码已过时。

+0

感谢您的答案。你能解释更多吗?所以从你的代码看来,'/ usr/local/android-sdk-24.0.2'或者SDK的绝对路径总是存在的。并且您正在将表单复制到Travis ci寻找的SDK位置?但是你说现在没有必要复制SDK。那么,我们如何防止Travis ci再次下载SDK? 另外我读到的问题是,每次启动新的Docker容器时,这就是为什么它需要重新下载所有内容。那么有没有办法解决它?谢谢! –

+0

忽略过时的例子,相关的位在这里,你可以添加任何你喜欢的文件并知道他的路径:'cache:' 'directories:'' - /usr/local/android-sdk-24.0.2 ;'像[这里](https://github.com/connectbot/connectbot/blob/master/.travis.yml#L13),但不建议这样做,因为将系统映像添加到缓存是矫枉过正的。 – albodelu

相关问题