$30 off During Our Annual Pro Sale. View Details »

Tips for Bitrise Android

Tips for Bitrise Android

Bitrise is a mobile-development-focused CI/DI PaaS.

In this talk, I shared some tips and things that I found while integrating Bitrise to Tapple for Android project. In this talk I also shared some of the benefits we gained by using fastlane actions as well.

* Bitrise DevCenter - What is Bitrise? - Bitrise DevCenter
https://devcenter.bitrise.io/

* Android code signing in Gradle - Bitrise DevCenter
https://devcenter.bitrise.io/code-signing/android-code-signing/android-code-signing-in-gradle/

* Actions - fastlane docs
https://docs.fastlane.tools/actions/

* How to cache Gradle dependencies - How To - Bitrise Discussions
https://discuss.bitrise.io/t/how-to-cache-gradle-dependencies/194

Shohei Kawano
PRO

June 21, 2018
Tweet

More Decks by Shohei Kawano

Other Decks in Technology

Transcript

  1. Tips for Bitrise
    Android
    @shaunkawano

    View Slide

  2. •How to setup Bitrise / Bitrise Steps
    •How to setup Fastlane
    •How to Manage bitrise.yml on Git
    Not Talking

    View Slide

  3. ?

    View Slide

  4. •Push Commit→ Run Test → Lint →
    Distribute App through Crashlytics

    •Push Tag(GitHub Draft Release) → 

    Build ReleaseAPK → Upload APK
    Before

    View Slide

  5. •Memory Shortage → Build Failure
    •Home-made shell script
    •For Slack notification
    •For code signing
    •For uploading APK to GitHub
    Release
    Problem

    View Slide

  6. View Slide

  7. •Memory Shortage → Build Failure 

    •Home-made shell script
    • For Slack notification
    • For code signing
    • For uploading APK to GitHub
    Release

    View Slide

  8. •Memory Shortage → ✅ NO MORE

    •Home-made shell script
    • For Slack notification
    • For code signing
    • For uploading APK to GitHub
    Release

    View Slide

  9. •Memory Shortage → ✅ NO MORE

    •Home-made shell script
    • For Slack notification
    • For code signing
    • For uploading APK to GitHub
    Release

    View Slide

  10. View Slide

  11. git clone
    bitrise.yml

    (bitrise.io)
    bitrise.yml

    (in-repository)

    View Slide

  12. View Slide

  13. Detecting tag triggered
    while managing bitrise.yml
    on your Git repository


    View Slide

  14. bitrise.yml(on bitrise.io)
    trigger_map:
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  15. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  16. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  17. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  18. bitrise.yml(in repository)
    trigger_map:
    - tag: "*"
    workflow: draftRelease
    - push_branch: master
    workflow: beta
    - push_branch: "*"
    workflow: test
    - pull_request_target_branch: "*"
    workflow: danger
    workflows:
    beta:
    title: Distribute new StagingRelease APK as beta
    before_run:
    - _prepare
    steps:
    - [email protected]:
    inputs:
    - content: |-
    bundle exec fastlane beta

    View Slide

  19. bitrise.yml(in repository)
    trigger_map:
    - tag: "*"
    workflow: draftRelease
    - push_branch: master
    workflow: beta
    - push_branch: "*"
    workflow: test
    - pull_request_target_branch: "*"
    workflow: danger
    workflows:
    beta:
    title: Distribute new StagingRelease APK as beta
    before_run:
    - _prepare
    steps:
    - [email protected]:
    inputs:
    - content: |-
    bundle exec fastlane beta
    ←EXPECT TO TRIGGER

    View Slide

  20. bitrise.yml(in repository)
    trigger_map:
    - tag: "*"
    workflow: draftRelease
    - push_branch: master
    workflow: beta
    - push_branch: "*"
    workflow: test
    - pull_request_target_branch: "*"
    workflow: danger
    workflows:
    beta:
    title: Distribute new StagingRelease APK as beta
    before_run:
    - _prepare
    steps:
    - [email protected]:
    inputs:
    - content: |-
    bundle exec fastlane beta
    ←ACTUALLY TRIGGERS

    View Slide

  21. View Slide

  22. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  23. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  24. $ bitrise help trigger

    View Slide

  25. $ bitrise help trigger

    View Slide

  26. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger "$BITRISE_GIT_BRANCH"

    View Slide

  27. bitrise.yml(on bitrise.io)
    trigger_map:
    - tag: "*"
    workflow: primary
    - push_branch: "*"
    workflow: primary
    - pull_request_source_branch: "*"
    workflow: primary
    workflows:
    primary:
    steps:
    - [email protected]: {}
    - [email protected]: {}
    - [email protected]:
    inputs:
    - content: |-
    #!/bin/bash
    bitrise trigger —-tag "$BITRISE_GIT_TAG"

    View Slide

  28. View Slide

  29. e.g.
    When new tag is pushed, 

    1. Draft new release on GitHub

    2. Build releasing-application
    3. Upload signed APK to the release

    View Slide

  30. bitrise.yml(in repository)
    draftRelease:
    title: Add new draft release on GitHub
    before_run:
    - _prepare
    steps:
    - file-downloader:
    inputs:
    - source: "$BITRISEIO_ANDROID_KEYSTORE_URL"
    - destination: "$BITRISE_SOURCE_DIR/tapple-android.keystore"
    - file-downloader:
    inputs:
    - source: "$BITRISEIO_TAPPLE_ANDROID_GRADLE_URL"
    - destination: "$BITRISE_SOURCE_DIR/tapple-android.gradle"
    - [email protected]:
    inputs:
    - content: |-
    bundle exec fastlane draftRelease

    View Slide

  31. bitrise.yml(in repository)
    draftRelease:
    title: Add new draft release on GitHub
    before_run:
    - _prepare
    steps:
    - file-downloader:
    inputs:
    - source: "$BITRISEIO_ANDROID_KEYSTORE_URL"
    - destination: "$BITRISE_SOURCE_DIR/tapple-android.keystore"
    - file-downloader:
    inputs:
    - source: "$BITRISEIO_TAPPLE_ANDROID_GRADLE_URL"
    - destination: "$BITRISE_SOURCE_DIR/tapple-android.gradle"
    - [email protected]:
    inputs:
    - content: |-
    bundle exec fastlane draftRelease

    View Slide

  32. View Slide

  33. bitrise.yml(in repository)
    draftRelease:
    title: Add new draft release on GitHub
    before_run:
    - _prepare
    steps:
    - file-downloader:
    inputs:
    - source: "$BITRISEIO_ANDROID_KEYSTORE_URL"
    - destination: "$BITRISE_SOURCE_DIR/tapple-android.keystore"
    - file-downloader:
    inputs:
    - source: "$BITRISEIO_TAPPLE_ANDROID_GRADLE_URL"
    - destination: "$BITRISE_SOURCE_DIR/tapple-android.gradle"
    - [email protected]:
    inputs:
    - content: |-
    bundle exec fastlane draftRelease

    View Slide

  34. Fastfile
    desc "Add Draft Release to GitHub"
    lane :draftRelease do
    gradle(task: 'assembleProductionRelease')
    set_github_release(
    repository_name: “xxxx",
    is_draft: true,
    api_token: ENV['GITHUB_API_TOKEN'],
    name: ENV['BITRISE_GIT_TAG'],
    tag_name: ENV[‘BITRISE_GIT_TAG'],
    description: commits_log,
    upload_assets:
    lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS]
    )
    slack(message: “New Draft Release! :)”)
    end

    View Slide

  35. Fastfile
    desc "Add Draft Release to GitHub"
    lane :draftRelease do
    gradle(task: 'assembleProductionRelease')
    set_github_release(
    repository_name: “xxxx",
    is_draft: true,
    api_token: ENV['GITHUB_API_TOKEN'],
    name: ENV['BITRISE_GIT_TAG'],
    tag_name: ENV[‘BITRISE_GIT_TAG'],
    description: commits_log,
    upload_assets:
    lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS]
    )
    slack(message: “New Draft Release! :)”)
    end

    View Slide

  36. Fastfile
    desc "Add Draft Release to GitHub"
    lane :draftRelease do
    gradle(task: 'assembleProductionRelease')
    set_github_release(
    repository_name: “xxxx",
    is_draft: true,
    api_token: ENV['GITHUB_API_TOKEN'],
    name: ENV['BITRISE_GIT_TAG'],
    tag_name: ENV[‘BITRISE_GIT_TAG'],
    description: commits_log,
    upload_assets:
    lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS]
    )
    slack(message: “New Draft Release! :)”)
    end

    View Slide

  37. View Slide

  38. •Caching .gradle / gem files
    •Automated screenshots upload
    •Run Bitrise from Slack chat
    WANT

    View Slide

  39. •jcenter.bintray.com issue(Not
    technically Bitrise issue)
    •Sometimes it fails to download
    Android package
    NOTICE

    View Slide

  40. Summary

    View Slide

  41. •Bitrise × Fastlane works nicely
    •file-downloader works as well
    Summary

    View Slide

  42. Tips for Bitrise
    Android
    @shaunkawano
    Thank you!

    View Slide