Slide 1

Slide 1 text

CircleCI Android tips CircleCI #4 2019/5/28 @ymnd

Slide 2

Slide 2 text

whoami twitter:@ymnd, GitHub:@ymnder Application Engineer Android Android : https://riconken.bitbucket.io/hifumi/

Slide 3

Slide 3 text

Circle CI . CI Private repository Danger CI CI

Slide 4

Slide 4 text

CircleCI . 2018 CircleCI . v . 15 push waiting v . ~ ↗↗↗

Slide 5

Slide 5 text

[CI] local -> GitHub -> CircleCI [CD] local -> Fabric Beta

Slide 6

Slide 6 text

CircleCI CD gradle Beta CD QA apk 1.0 master apk

Slide 7

Slide 7 text

CircleCI A: UnitTest gradle-git-repo-plugin B: Danger

Slide 8

Slide 8 text

CircleCI private repository

Slide 9

Slide 9 text

CircleCI private repository private CircleCI UnitTest submodule gradle-git-repo-plugin

Slide 10

Slide 10 text

submodule git submodule update init

Slide 11

Slide 11 text

gradle-git-repo-plugin private private aar git clone ~/.gitRepos/ ~/.gitRepos/ https://qiita.com/kgmyshin/items/ f c c fbd https://qiita.com/shimada_takuya/items/ e b ae f ad a

Slide 12

Slide 12 text

gradle-git-repo-plugin fork grgit GitHub https://blog.github.com/ - - -weak-cryptographic- standards-removed/

Slide 13

Slide 13 text

gradle-git-repo-plugin //build.gradle dependencies { classpath 'com.github.atsushi-ageet:gradle-git-repo-plugin:2.0.4' } //app/build.gradle apply plugin: 'git-repo' repositories { // Username repository name branch directory github("Nikkei", "KaizenRequest_Android", "master", "repository") } dependencies { implementation ('com.nikkei:kaizenrequest:1.4.1') { }

Slide 14

Slide 14 text

gradle-git-repo-plugin Circle CI version: 2 jobs: build: working_directory: ~/code docker: - image: circleci/android:api-28 environment: _JAVA_OPTIONS: -Xms512m -Xmx1024m steps: - checkout - add_ssh_keys: fingerprints: - “ssh_key” - run: cp ssh_config ~/.ssh/config - run: git clone [email protected]:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline

Slide 15

Slide 15 text

gradle-git-repo-plugin Circle CI version: 2 jobs: build: working_directory: ~/code docker: - image: circleci/android:api-28 environment: _JAVA_OPTIONS: -Xms512m -Xmx1024m steps: - checkout - add_ssh_keys: fingerprints: - “ssh_key” - run: cp ssh_config ~/.ssh/config - run: git clone [email protected]:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline

Slide 16

Slide 16 text

gradle-git-repo-plugin Circle CI CI Deploy Keys current branch ssh key != library ssh key add_ssh_keys GitHub(deploy keys) -> CircleCI(SSH Permissions)

Slide 17

Slide 17 text

gradle-git-repo-plugin Circle CI version: 2 jobs: build: working_directory: ~/code docker: - image: circleci/android:api-28 environment: _JAVA_OPTIONS: -Xms512m -Xmx1024m steps: - checkout - add_ssh_keys: fingerprints: - “ssh_key” - run: cp ssh_config ~/.ssh/config - run: git clone [email protected]:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline

Slide 18

Slide 18 text

gradle-git-repo-plugin Circle CI //ssh_config Host Hoge-Android HostName github.com User git IdentityFile /home/circleci/.ssh/id_hoge Host Fuga-Android HostName github.com User git IdentityFile /home/circleci/.ssh/id_hoge - run: git clone git@Hoge-Android:ymnder/Hoge.git ~/.gitRepos/hoge_library - run: git clone git@Fuga-Android:ymnder/Fuga.git ~/.gitRepos/fuga_library

Slide 19

Slide 19 text

gradle-git-repo-plugin Circle CI repository clone ssh_con g clone

Slide 20

Slide 20 text

gradle-git-repo-plugin Circle CI version: 2 jobs: build: working_directory: ~/code docker: - image: circleci/android:api-28 environment: _JAVA_OPTIONS: -Xms512m -Xmx1024m steps: - checkout - add_ssh_keys: fingerprints: - “ssh_key” - run: cp ssh_config ~/.ssh/config - run: git clone [email protected]:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline

Slide 21

Slide 21 text

gradle-git-repo-plugin Circle CI Test gradle -Po ine git-repo-plugin GitHub private repository

Slide 22

Slide 22 text

Danger (Ruby) CI Pull Requests

Slide 23

Slide 23 text

Danger plugin issue issue Milestone WIP Lint

Slide 24

Slide 24 text

Danger APK https://github.com/jmatsu/danger-apkstats

Slide 25

Slide 25 text

Danger Gem le gem install bundle bundle init Gem le # Gemfile gem 'danger' gem 'danger-android_lint' gem 'danger-apkstats'

Slide 26

Slide 26 text

Danger Gem le lock bundle install Danger le ### lint android_lint.gradle_task = "lintDebug -Poffline" android_lint.report_file = "path/app/build/reports/lint-results-Debug.xml" android_lint.filtering = true android_lint.lint(inline_mode: true) ### stats apkstats.command_type=:apk_analyzer apkstats.apk_filepath='~/app-debug.apk' apkstats.compare_with('~/old-app-debug.apk', do_report: true)

Slide 27

Slide 27 text

Danger android_lint. ltering lint https://github.com/loadsmart/danger-android_lint/blob/ c bf b aa c b a a bd af /lib/ android_lint/plugin.rb#L

Slide 28

Slide 28 text

Danger .circleci/con g.yml images Ruby - save_cache: paths: - ~/.gradle key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }} - restore_cache: key: gems-{{ checksum "Gemfile.lock" }} - run: bundle install --path vendor/bundle - save_cache: paths: - vendor/bundle key: gems-{{ checksum "Gemfile.lock" }} # make app - run: name: Run danger command: bundle exec danger

Slide 29

Slide 29 text

Danger GitHub Personal access tokens https://github.com/settings/tokens Private repository [repo] bot CircleCI Environment Variables DANGER_GITHUB_API_TOKEN

Slide 30

Slide 30 text

Danger PR

Slide 31

Slide 31 text

CI Danger library permission CD 策 internal app sharing

Slide 32

Slide 32 text

: images licenses accepted 策 1 circleci/android:api- X-alpha image SDK docker gradle > Android Platform SDK license not accepted https://discuss.circleci.com/t/android-platform- -sdk- license-not-accepted/

Slide 33

Slide 33 text

: images licenses accepted .circle/con g.yml run: yes | sdkmanager --licenses || exit run: yes | sdkmanager --update || exit https://discuss.circleci.com/t/android-platform- -sdk- license-not-accepted/ /

Slide 34

Slide 34 text

: images licenses accepted release circleci/android:api- X alpha images

Slide 35

Slide 35 text

https://speakerdeck.com/jmatsu/cd-based-on- droidkaigi- -app-e ae-fe - -b -e e fbaf d https://qiita.com/noboru_i/items/f b b d https://qiita.com/noboru_i/items/ ad c d b c eb b https://qiita.com/hkusu/items/e bd efa f http://tech.connehito.com/entry/danger https://techblog.lclco.com/entry/ / / /