CircleCIと半年間格闘してみた
by
Keisuke Kobayashi
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
CircleCIと 半年間格闘してみた kobakei potatotips #18
Slide 2
Slide 2 text
Keisuke Kobayashi (kobakei) ● Coubic, Inc ● Android & Rails engineer ● Twitter @ksk_kbys ● GitHub, Qiita @kobakei
Slide 3
Slide 3 text
無料で使える予約システム Coubic (クービック) https://coubic.com
Slide 4
Slide 4 text
サロン・マッサージの 当日予約・直前予約アプリ
Slide 5
Slide 5 text
CircleCI 導入の前に
Slide 6
Slide 6 text
Why CI? / Why CircleCI? ● ビルド&ベータ版配布の自動化 ○ 手動でビルド&配布する時間が無駄 ○ チームの誰もが最新のベータに触れる → バグの早期発見、フィードバックしやすい環境 ● 導入コストが低い ○ コンテナ1個なら無料 ○ Androidサポート(苦労しないとは言ってない)
Slide 7
Slide 7 text
CircleCIを 導入する
Slide 8
Slide 8 text
circle.ymlをプロジェクトに追加 ● プロジェクトのルートにcircle.ymlを追加 ● 環境変数の設定や、実行したいテストや デプロイのコマンドを書く ● https://circleci.com/docs/android ここに大体書いてある
Slide 9
Slide 9 text
CircleCIにログインして設定 ● GitHubアカウントで登録/ログイン ● CIしたいプロジェクトを選ぶだけ
Slide 10
Slide 10 text
ここからが本題
Slide 11
Slide 11 text
今日話したいこと ● CircleCI稼働中に発生した問題 ● その対策 ○ ぐぐっても対策が見つからなくて、CircleCIの中の人に 問い合わせた内容含む
Slide 12
Slide 12 text
問題1 OutOfMemory
Slide 13
Slide 13 text
OutOfMemory問題 ● CircleCIはメモリ4GBまで ● この制限を超えるとジョブが失敗
Slide 14
Slide 14 text
対策 circle.ymlで JAVA_OPTS: “-Xms256m -Xmx512m”で JVMのメモリ使用量を指定
Slide 15
Slide 15 text
問題2 ライブラリを追加しまくるとやはり OutOfMemory
Slide 16
Slide 16 text
OutOfMemory再発 ● (多分)巨大なライブラリの追加で発生 ○ Dagger 2, EventBus, Stetho, etc ● assemble過程のdexタスクが並列で複数走るこ とによって発生 ○ dexはJAVA_OPTSでメモリを制御できない
Slide 17
Slide 17 text
対策 app/build.gradleに、dexOptionsを追加 ビルドが安定して通るまで値を下げていく
Slide 18
Slide 18 text
問題3 65K問題
Slide 19
Slide 19 text
65K問題 ● メソッド数が65Kを超えるとビルドできない ○ 機能追加、ライブラリ追加によって、65K問題に 遭遇 ● multidexを追加して対応(※) ● このときに、再びビルドに失敗するようになる ※ https://developer.android.com/intl/ja/tools/building/multidex.html
Slide 20
Slide 20 text
解決策 ● dexOptionsのjavaMaxHeapSizeを 1GBに増やした ○ multidexだとjavaMaxHeapSizeが小さすぎると ビルドできない ○ ビルドが通るまで、256MB → 512MB → 1GBと 増やして検証
Slide 21
Slide 21 text
まとめ ● CircleCI for Android は OOM との戦い ● 肝はJAVA_OPTS と javaMaxHeapSize ● 今では安定稼働しています
Slide 22
Slide 22 text
Thank you! Coubic Inc.