Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Caching on Bitrise Android

Caching on Bitrise Android

When using caching on Bitrise, you would use cache-pull&csche-push steps. In this talk I talked about how to use them and how we can customize to enable/disable caching using git command and envman tool.

Shohei Kawano

August 16, 2018
Tweet

More Decks by Shohei Kawano

Other Decks in Technology

Transcript

  1. Caching on Bitrise
    @shaunkawano

    View Slide

  2. git clone
    bitrise.yml

    (bitrise.io)
    bitrise.yml

    (in-repository)

    View Slide

  3. View Slide

  4. Caching on Bitrise

    View Slide

  5. IUUQTEFWDFOUFSCJUSJTFJPDBDIJOHBCPVUDBDIJOH

    View Slide

  6. •Stored securely in Amazon S3
    •Per specific branches
    •By default: will be deleted after 7
    days without any build
    Caching on Bitrise

    View Slide

  7. IUUQTEFWDFOUFSCJUSJTFJPDBDIJOHBCPVUDBDIJOH

    View Slide

  8. IUUQTEFWDFOUFSCJUSJTFJPDBDIJOHBCPVUDBDIJOH
    Caching

    gradle & maven

    View Slide

  9. •cache-pull
    •Pull cache from remote server if
    available
    •cache-push
    •Check if cache needs to be updated
    •Upload the caching content if
    required
    Caching Steps

    View Slide

  10. cache-pull
    _prepare:
    title: Prepare fastlane
    steps:
    - script:
    inputs:
    - content: |-
    bundle install --path vendor/bundle
    - cache-pull: {}

    View Slide

  11. cache-pull
    _prepare:
    title: Prepare fastlane
    steps:
    - script:
    inputs:
    - content: |-
    bundle install --path vendor/bundle
    - cache-pull: {}

    View Slide

  12. cache-push
    _cache:
    title: Cache gradle and maven dependencies
    steps:
    - cache-push:
    inputs:
    - cache_paths: |-
    $HOME/.gradle
    ./.gradle
    $HOME/.m2
    - ignore_check_on_paths: |-
    $HOME/.gradle/caches/*.lock
    ./.gradle/*.lock
    ./.gradle/*.bin

    View Slide

  13. cache-push
    _cache:
    title: Cache gradle and maven dependencies
    steps:
    - cache-push:
    inputs:
    - cache_paths: |-
    $HOME/.gradle
    ./.gradle
    $HOME/.m2
    - ignore_check_on_paths: |-
    $HOME/.gradle/caches/*.lock
    ./.gradle/*.lock
    ./.gradle/*.bin

    View Slide

  14. Workflow
    test:
    title: Run unit test
    before_run:
    - _prepare
    after_run:
    - _cache
    steps:
    - script:
    inputs:
    - content: |-
    bundle exec fastlane test

    View Slide

  15. Workflow
    test:
    title: Run unit test
    before_run:
    - _prepare
    after_run:
    - _cache
    steps:
    - script:
    inputs:
    - content: |-
    bundle exec fastlane test

    View Slide

  16. View Slide

  17. Try pushing library update

    View Slide


  18. Again, 

    cached gradle / maven data is used

    View Slide

  19. View Slide

  20. Want to re-build if certain files are
    modified

    View Slide

  21. _parepareCacheEnv:
    title: Set environment variable if we can use cache or not
    steps:
    - script:
    inputs:
    - content: |-
    if [[ -n $(git diff-tree --no-commit-id —name-only
    -r $GIT_CLONE_COMMIT_HASH -- find -name
    'versions.gradle'
    ‘app/build.gradle')
    ]]
    then
    envman add --key USE_CACHE --value "false"
    echo "_parepareCacheEnv result: USE_CACHE == false"
    else
    envman add --key USE_CACHE --value "true"
    echo "_parepareCacheEnv result: USE_CACHE == true"
    fi

    View Slide

  22. _parepareCacheEnv:
    title: Set environment variable if we can use cache or not
    steps:
    - script:
    inputs:
    - content: |-
    if [[ -n $(git diff-tree --no-commit-id —name-only
    -r $GIT_CLONE_COMMIT_HASH -- find -name
    'versions.gradle'
    ‘app/build.gradle')
    ]]
    then
    envman add --key USE_CACHE --value "false"
    echo "_parepareCacheEnv result: USE_CACHE == false"
    else
    envman add --key USE_CACHE --value "true"
    echo "_parepareCacheEnv result: USE_CACHE == true"
    fi

    View Slide

  23. _parepareCacheEnv:
    title: Set environment variable if we can use cache or not
    steps:
    - script:
    inputs:
    - content: |-
    if [[ -n $(git diff-tree --no-commit-id —name-only
    -r $GIT_CLONE_COMMIT_HASH -- find -name
    'versions.gradle'
    ‘app/build.gradle')
    ]]
    then
    envman add --key USE_CACHE --value "false"
    echo "_parepareCacheEnv result: USE_CACHE == false"
    else
    envman add --key USE_CACHE --value "true"
    echo "_parepareCacheEnv result: USE_CACHE == true"
    fi

    View Slide

  24. _parepareCacheEnv:
    title: Set environment variable if we can use cache or not
    steps:
    - script:
    inputs:
    - content: |-
    if [[ -n $(git diff-tree --no-commit-id —name-only
    -r $GIT_CLONE_COMMIT_HASH -- find -name
    'versions.gradle'
    ‘app/build.gradle')
    ]]
    then
    envman add --key USE_CACHE --value "false"
    echo "_parepareCacheEnv result: USE_CACHE == false"
    else
    envman add --key USE_CACHE --value "true"
    echo "_parepareCacheEnv result: USE_CACHE == true"
    fi

    View Slide

  25. _parepareCacheEnv:
    title: Set environment variable if we can use cache or not
    steps:
    - script:
    inputs:
    - content: |-
    if [[ -n $(git diff-tree --no-commit-id —name-only
    -r $GIT_CLONE_COMMIT_HASH -- find -name
    'versions.gradle'
    ‘app/build.gradle')
    ]]
    then
    envman add --key USE_CACHE --value "false"
    echo "_parepareCacheEnv result: USE_CACHE == false"
    else
    envman add --key USE_CACHE --value "true"
    echo "_parepareCacheEnv result: USE_CACHE == true"
    fi

    View Slide

  26. test:
    title: Run unit test
    before_run:
    - _parepareCacheEnv
    - _prepare
    after_run:
    - _cache
    steps:
    - script:
    inputs:
    - content: |-
    bundle exec fastlane test

    View Slide

  27. test:
    title: Run unit test
    before_run:
    - _parepareCacheEnv
    - _prepare
    after_run:
    - _cache
    steps:
    - script:
    inputs:
    - content: |-
    bundle exec fastlane test

    View Slide

  28. test:
    title: Run unit test
    before_run:
    - _parepareCacheEnv
    - _prepare
    after_run:
    - _cache
    steps:
    - script:
    inputs:
    - content: |-
    bundle exec fastlane test

    View Slide

  29. _prepare:
    title: Prepare fastlane
    steps:
    - script:
    inputs:
    - content: |-
    bundle install --path vendor/bundle
    - cache-pull:
    run_if: '{{getenv "USE_CACHE" | eq "true"}}'

    View Slide

  30. _prepare:
    title: Prepare fastlane
    steps:
    - script:
    inputs:
    - content: |-
    bundle install --path vendor/bundle
    - cache-pull:
    run_if: '{{getenv "USE_CACHE" | eq "true"}}'

    View Slide


  31. Bitrise re-built without cache
    successfully!

    View Slide

  32. View Slide

  33. Summary

    View Slide

  34. •Use cache-pull & cache-push steps
    for enabling caching on Bitrise
    •Configuration may be required
    •Ask Bitrise team for help :)
    Summary

    View Slide

  35. Caching on Bitrise
    @shaunkawano
    Thank you!

    View Slide