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
2k
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
7k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
850
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
10k
Kyashアプリ開発の現場
kobakei
4
2.5k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
290
APIクライアントをCodableで置き換えた話
kobakei
0
1.4k
開発者が知っておきたい通知の歴史
kobakei
10
7.2k
mockito-kotlin
kobakei
1
480
2017年に新規アプリを立ち上げた話
kobakei
2
980
Other Decks in Programming
See All in Programming
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
740
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
490
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
740
検証も兼ねて個人開発でHonoとかと向き合った話
hanetsuki
0
850
VS Code をプロダクトにどう取り込むか
onomax
1
360
ONE WEDGE_company_guide
1wedge_one
0
470
データアナリストが行うDatabricksを活用したETLの自動化事例
shinoa
0
260
Hanami and htmx
bkuhlmann
0
210
1BRC--Nerd Sniping the Java Community
gunnarmorling
0
340
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
1.2k
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
8.2k
Featured
See All Featured
Docker and Python
trallard
34
2.7k
How GitHub (no longer) Works
holman
304
140k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
19
1.7k
Rebuilding a faster, lazier Slack
samanthasiow
73
8.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
4 Signs Your Business is Dying
shpigford
175
21k
GitHub's CSS Performance
jonrohan
1025
450k
Side Projects
sachag
451
41k
What's in a price? How to price your products and services
michaelherold
237
11k
Imperfection Machines: The Place of Print at Facebook
scottboms
260
12k
Navigating Team Friction
lara
178
13k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
2
1.3k
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.