Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
CircleCIを使ったAndroidの開発フローの効率化とtips
ymnder
May 28, 2019
Technology
1
880
CircleCIを使ったAndroidの開発フローの効率化とtips
CircleCI ユーザーコミュニティミートアップ #4 2019/5/28 @ymnd
https://circleci.connpass.com/event/125622/
ymnder
May 28, 2019
Tweet
Share
More Decks by ymnder
See All by ymnder
Introduction to new features of Google Play Billing
ymnder
2
240
運用から学ぶPlay Billing Library
ymnder
2
600
What’s new in Google Play Billing v1.2
ymnder
0
600
詳解定期購入
ymnder
7
4.7k
社内向けライブラリを設計・運用する話
ymnder
0
550
What’s new in Google Play Billing
ymnder
2
1.6k
電子の本ができるまで
ymnder
0
340
Waiting for slices
ymnder
0
340
What I Wish I Knew When I Went IO
ymnder
6
540
Other Decks in Technology
See All in Technology
実験!カオスエンジニアリング / How to Chaos Engineering
oracle4engineer
PRO
0
140
SRENEXT2022 組織にSREを実装していくまでの道のり
marnie0301
1
430
0->1 フェーズで E2E 自動テストを導入した私たちの、これまでとこれから
yoyakoba
0
430
AWS Control TowerとAWS Organizationsを活用した組織におけるセキュリティ設定
fu3ak1
2
640
Scrum Fest Niigata 2022 開発エンジニアに聞いてみよう!
moritamasami
1
210
HTTP Session Architecture Pattern
chiroito
1
400
[SRE NEXT 2022]ヤプリのSREにおけるセキュリティ強化の取り組みを公開する
mmochi23
1
490
1,000万人以上が利用する「家族アルバム みてね」のSRE組織は4年間でどのように作られてきたのか/SRE NEXT 2022
isaoshimizu
5
3k
Data-Driven Healthcare - Techplay
kotaroito
0
110
Whats new in Android Media?
myolwin00
2
110
數據的多重宇宙 @ LINE Taiwan
line_developers_tw
PRO
0
680
[SRE NEXT 2022]組織に対してSREを適用するとはどういうことか
srenext
0
180
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.2k
Documentation Writing (for coders)
carmenhchung
48
2.5k
The Brand Is Dead. Long Live the Brand.
mthomps
45
2.7k
Building Applications with DynamoDB
mza
83
4.6k
Scaling GitHub
holman
451
140k
The Pragmatic Product Professional
lauravandoore
19
2.9k
Why You Should Never Use an ORM
jnunemaker
PRO
47
5.5k
How GitHub (no longer) Works
holman
296
140k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
11
4.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
396
62k
The Most Common Mistakes in Cover Letters
jrick
PRO
4
24k
Atom: Resistance is Futile
akmur
255
20k
Transcript
CircleCI Android tips CircleCI #4 2019/5/28 @ymnd
whoami twitter:@ymnd, GitHub:@ymnder Application Engineer Android Android : https://riconken.bitbucket.io/hifumi/
Circle CI . CI Private repository Danger CI CI
CircleCI . 2018 CircleCI . v . 15 push waiting
v . ~ ↗↗↗
[CI] local -> GitHub -> CircleCI [CD] local -> Fabric
Beta
CircleCI CD gradle Beta CD QA apk 1.0 master apk
CircleCI A: UnitTest gradle-git-repo-plugin B: Danger
CircleCI private repository
CircleCI private repository private CircleCI UnitTest submodule gradle-git-repo-plugin
submodule git submodule update init
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
gradle-git-repo-plugin fork grgit GitHub https://blog.github.com/ - - -weak-cryptographic- standards-removed/
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') { }
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 git@github.com:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline
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 git@github.com:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline
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)
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 git@github.com:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline
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
gradle-git-repo-plugin Circle CI repository clone ssh_con g clone
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 git@github.com:ymnder/Hoge.git ~/.gitRepos/ymnder/hoge_library - run: name: Run Unit Test command: ./gradlew testReleaseUnitTest -Poffline
gradle-git-repo-plugin Circle CI Test gradle -Po ine git-repo-plugin GitHub private
repository
Danger (Ruby) CI Pull Requests
Danger plugin issue issue Milestone WIP Lint
Danger APK https://github.com/jmatsu/danger-apkstats
Danger Gem le gem install bundle bundle init Gem le
# Gemfile gem 'danger' gem 'danger-android_lint' gem 'danger-apkstats'
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)
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
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
Danger GitHub Personal access tokens https://github.com/settings/tokens Private repository [repo] bot
CircleCI Environment Variables DANGER_GITHUB_API_TOKEN
Danger PR
CI Danger library permission CD 策 internal app sharing
: 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/
: 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/ /
: images licenses accepted release circleci/android:api- X alpha images
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/ / / /