Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CircleCIと半年間格闘してみた
Search
Keisuke Kobayashi
June 16, 2015
Programming
6
2.1k
CircleCIと半年間格闘してみた
potatotips 18
Keisuke Kobayashi
June 16, 2015
Tweet
Share
More Decks by Keisuke Kobayashi
See All by Keisuke Kobayashi
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.4k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
930
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
11k
Kyashアプリ開発の現場
kobakei
4
2.7k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
310
APIクライアントをCodableで置き換えた話
kobakei
0
1.5k
開発者が知っておきたい通知の歴史
kobakei
9
7.5k
mockito-kotlin
kobakei
1
510
2017年に新規アプリを立ち上げた話
kobakei
2
1.1k
Other Decks in Programming
See All in Programming
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
210
良いコードレビューとは
danimal141
9
6k
「個人開発マネタイズ大全」が教えてくれたこと
bani24884
1
290
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
8
1.4k
ML.NETで始める機械学習
ymd65536
0
240
Lambdaの監視、できてますか?Datadogを用いてLambdaを見守ろう
nealle
2
730
AIプログラミング雑キャッチアップ
yuheinakasaka
19
5k
kintone開発を効率化するためにチームで試した施策とその結果を大放出!
oguemon
0
320
クックパッド検索システム統合/Cookpad Search System Consolidation
giga811
0
130
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
160
Jakarta EE meets AI
ivargrimstad
0
600
dbt Pythonモデルで実現するSnowflake活用術
trsnium
0
270
Featured
See All Featured
BBQ
matthewcrist
87
9.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Six Lessons from altMBA
skipperchong
27
3.6k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.4k
RailsConf 2023
tenderlove
29
1k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
For a Future-Friendly Web
brad_frost
176
9.6k
4 Signs Your Business is Dying
shpigford
183
22k
Transcript
CircleCIと 半年間格闘してみた kobakei potatotips #18
Keisuke Kobayashi (kobakei) • Coubic, Inc • Android & Rails
engineer • Twitter @ksk_kbys • GitHub, Qiita @kobakei
無料で使える予約システム Coubic (クービック) https://coubic.com
サロン・マッサージの 当日予約・直前予約アプリ
CircleCI 導入の前に
Why CI? / Why CircleCI? • ビルド&ベータ版配布の自動化 ◦ 手動でビルド&配布する時間が無駄 ◦
チームの誰もが最新のベータに触れる → バグの早期発見、フィードバックしやすい環境 • 導入コストが低い ◦ コンテナ1個なら無料 ◦ Androidサポート(苦労しないとは言ってない)
CircleCIを 導入する
circle.ymlをプロジェクトに追加 • プロジェクトのルートにcircle.ymlを追加 • 環境変数の設定や、実行したいテストや デプロイのコマンドを書く • https://circleci.com/docs/android ここに大体書いてある
CircleCIにログインして設定 • GitHubアカウントで登録/ログイン • CIしたいプロジェクトを選ぶだけ
ここからが本題
今日話したいこと • CircleCI稼働中に発生した問題 • その対策 ◦ ぐぐっても対策が見つからなくて、CircleCIの中の人に 問い合わせた内容含む
問題1 OutOfMemory
OutOfMemory問題 • CircleCIはメモリ4GBまで • この制限を超えるとジョブが失敗
対策 circle.ymlで JAVA_OPTS: “-Xms256m -Xmx512m”で JVMのメモリ使用量を指定
問題2 ライブラリを追加しまくるとやはり OutOfMemory
OutOfMemory再発 • (多分)巨大なライブラリの追加で発生 ◦ Dagger 2, EventBus, Stetho, etc •
assemble過程のdexタスクが並列で複数走るこ とによって発生 ◦ dexはJAVA_OPTSでメモリを制御できない
対策 app/build.gradleに、dexOptionsを追加 ビルドが安定して通るまで値を下げていく
問題3 65K問題
65K問題 • メソッド数が65Kを超えるとビルドできない ◦ 機能追加、ライブラリ追加によって、65K問題に 遭遇 • multidexを追加して対応(※) • このときに、再びビルドに失敗するようになる
※ https://developer.android.com/intl/ja/tools/building/multidex.html
解決策 • dexOptionsのjavaMaxHeapSizeを 1GBに増やした ◦ multidexだとjavaMaxHeapSizeが小さすぎると ビルドできない ◦ ビルドが通るまで、256MB →
512MB → 1GBと 増やして検証
まとめ • CircleCI for Android は OOM との戦い • 肝はJAVA_OPTS
と javaMaxHeapSize • 今では安定稼働しています
Thank you! Coubic Inc.