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
プロダクト開発をAI 1stに変革する〜SaaS is dead時代で生き残るために〜 / AI 1st Product Development
kobakei
0
1.2k
今日から始める依存性の注入 / First Time Dependency Injection
kobakei
26
7.6k
iOSアプリの技術的負債をどう返済したか / How to repay the technical debt of iOS app
kobakei
2
980
iOSアプリ内で不正なSSL証明書を検知する / SSL Pinning for iOS apps
kobakei
34
12k
Kyashアプリ開発の現場
kobakei
4
2.9k
Review of Google I/O 2017 & Prepare for Google I/O 2018
kobakei
0
320
APIクライアントをCodableで置き換えた話
kobakei
0
1.6k
開発者が知っておきたい通知の歴史
kobakei
9
7.7k
mockito-kotlin
kobakei
1
530
Other Decks in Programming
See All in Programming
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
260
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
360
Introduce Hono CLI
yusukebe
6
3.1k
他言語経験者が Golangci-lint を最初のコーディングメンターにした話 / How Golangci-lint Became My First Coding Mentor: A Story from a Polyglot Programmer
uma31
0
340
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
890
その面倒な作業、「Dart」にやらせませんか? Flutter開発者のための業務効率化
yordgenome03
1
140
AIと人間の共創開発!OSSで試行錯誤した開発スタイル
mae616
2
800
React Nativeならぬ"Vue Native"が実現するかも?_新世代マルチプラットフォーム開発フレームワークのLynxとLynxのVue.js対応を追ってみよう_Vue Lynx
yut0naga1_fa
2
520
SODA - FACT BOOK(JP)
sodainc
1
8.7k
チームの境界をブチ抜いていけ
tokai235
0
220
iOSでSVG画像を扱う
kishikawakatsumi
0
160
CSC305 Lecture 10
javiergs
PRO
0
230
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Rails Girls Zürich Keynote
gr2m
95
14k
4 Signs Your Business is Dying
shpigford
185
22k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Balancing Empowerment & Direction
lara
5
700
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
116
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Speed Design
sergeychernyshev
32
1.2k
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.