CircleCIと半年間格闘してみた
by
Keisuke Kobayashi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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.