Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
CIをGASで継続的に改善したら幸せになった
kwzr
February 21, 2019
Technology
3
1.2k
CIをGASで継続的に改善したら幸せになった
kwzr
February 21, 2019
Tweet
Share
More Decks by kwzr
See All by kwzr
iOS・Androidで使える デザインシステムをどう実装するか
kwzr
3
3.6k
Apple Pencilと左利き対応
kwzr
5
1.2k
BitriseでUIの差分検出
kwzr
0
930
Other Decks in Technology
See All in Technology
How to start with DDD when you have a Monolith
javujavichi
0
360
Introduction To Technical Writing
olawanle_joel
0
100
Empath Company Deck
empathpr
0
140
Security Hub のマルチアカウント 管理・運用をサーバレスでやってみる
ch6noota
0
930
【Pythonデータ分析勉強会#33】「DearPyGuiに入門しました」の続き~Image-Processing-Node-Editor~
kazuhitotakahashi
0
180
HoloLens2とMetaQuest2どちらも動くWebXRアプリをBabylon.jsで作る
iwaken71
0
210
Target SDK Versionを上げない Notification runtime permission対応
napplecomputer
0
150
LINEのB2Bプラットフォームにおけるトラブルシューティング2選
line_developers
PRO
4
310
スタートアップと技術選定と AWS
track3jyo
PRO
2
350
雑な攻撃からELBを守る一工夫 +おまけ / Know-how to protect servers from miscellaneous attacks
hiroga
0
620
サーバレスECにおける Step Functions の使い方 〜ステートマシン全部見せます!〜
miu_crescent
0
200
インフラのCI/CDはGitHub Actionsに任せた
mihyon
0
120
Featured
See All Featured
Embracing the Ebb and Flow
colly
73
3.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
212
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
15
950
Streamline your AJAX requests with AmplifyJS and jQuery
dougneiner
127
8.5k
No one is an island. Learnings from fostering a developers community.
thoeni
9
1.3k
BBQ
matthewcrist
74
7.9k
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
What's new in Ruby 2.0
geeforr
336
30k
Put a Button on it: Removing Barriers to Going Fast.
kastner
56
2.3k
Designing for Performance
lara
597
63k
Music & Morning Musume
bryan
35
4.2k
The Language of Interfaces
destraynor
148
20k
Transcript
CIをGASで継続的に 改善したら幸せになった CI/CD Test Night #3 pixiv Inc. kwzr /
Kazumasa Kawazure 2019.02.21
2 自己紹介 • kwzr / Kazumasa Kawazure ◦ Twitter :
@_kwzr_ • ピクシブでpixiv Sketch iOSの開発 ◦ 以前はいろんなiOS・Androidアプリの開発 • 情熱大陸に映り込んだことがある ◦ オレは情熱大陸出たことあるけど、キミは ? kwzr モバイルアプリエンジニア
• 2018年1月からBitriseに移行 ◦ 社内ライブラリなどを含めて21個のアプリが登録 ◦ 毎週約300回以上のビルド ◦ Org Standard Plan(最大6並列ビルド)
◦ 社内配布方法の変更 • サーバーサイドやWebフロントのことはわかりません ◦ Circle CIとGitLab CIを使っているはず 3 ピクシブのモバイルCI事情について
• 2018年1月からBitriseに移行 ◦ 社内ライブラリなどを含めて21個のアプリが登録 ◦ 毎週約300回以上のビルド ← どうやって取っているの ◦ Org
Standard Plan(最大6並列ビルド) ← どうやって決めたの ◦ 社内配布方法の変更 ← なに • サーバーサイドやWebフロントのことはわかりません ◦ Circle CIとGitLab CIを使っているはず 4 話すこと
• Jenkinsの介護がつらく、CIサービスを探していた ◦ 新しいXcodeが出たらインストールが必要 ◦ VPNを繋がないと見れない。特にスマホからアクセスしたい時に面倒 ▪ 社員以外の人にCIの結果を見てもらうのが難しかった ◦ 自作の配布ページを作ってそこから社内配布していた
▪ メンテあまりされていない ▪ アプリによってはDeployGateを使っていた 5 Bitriseに移行した流れ
• 言わずと知れたモバイルアプリ向け CIサービス • GUIでワークフローやトリガーを操作できる。 UIがかわいい(重要) • 他CIサービスと比べても比較的安価 • アプリの配布機能もある(Deploy
to Bitrise.io) • とてもよい! 6 Bitriseとは
• 最初はOrg Standard Plan(最大3並列)を導入 • 弊社、アプリの数が多い ◦ 参考: モバイルアプリエンジニア約20人 :
iOS・Androidアプリ 13個 • アプリのフルビルド時間は10-20分くらい掛かってとても長い • 思い思いにビルドを走らせると、最大 3並列ビルドだと頻繁に詰まる!! • → プラン変えよう! 7 移行してわかってきた問題
• Google Apps Script(GAS)とBitrise.io API v0.1を使用 ◦ Bitrise.io APIはまだWIPらしいけど、だいたい動いてる •
始業時間前に前日のビルドを集計して、スプレッドシートに記録 ◦ ビルド回数・ホールド時間・ビルド時間等 ◦ https://github.com/kvvzr/bitrise-collect ◦ 2018年2月から取ってる 8 まずは計測しよ...
• 手軽にデプロイできる • WebHookからの起動や、スケジューリングができる • 計測したいので、SpreadSheetに書き出したい • 普段使っている、慣れているもので要件を満たしていたらなんでも良さそう 9 なぜGAS?
• 置かれている状況による ◦ 金の弾丸が使えるなら、良いやつを選べば良さそう (適当) ▪ おそらく、稟議の起案理由に妥当なことを書く必要 ◦ 計測した結果を使って、状況に合うコスパの良いプランを選ぶ •
1日の総ホールド時間を基準にすることにした ◦ ホールド時間 = ビルド開始時間 - ビルド実行(トリガー)時間 10 何を見てプランを決めるか?
11 総ホールド時間の推移(2018/08-2018/12)
12 総ホールド時間の推移(2018/08-2018/12) Org Elite Plan 最大3並列ビルド 2 week trial ホールド時間減ってる
• Org Elite Planはハイスペックなマシンが使えるプラン ◦ 毎ビルド5分以上早く終わるようになってすごい! ▪ しかし、まだそこそこ詰まる ◦ 値段がOrg
Standard Planの倍 ◦ スペック上げるより、並列数増やしたほうが良さそう 13 計測してわかったこと
14 総ホールド時間の推移(2018/08-2018/12) Org Standard Plan 最大6並列ビルド 導入 狙い通り、ホールド時間がほ ぼ0になった
• 何を減らしたいのか ◦ 待ってる時間の人件費換算? (でも待ってる間別の作業できるし ... • 気持ち!!!!!!!1(のすり減り) ◦ ホールド待ちは他のプロジェクトが原因なのでヘイトが溜まる
◦ 自分のプロジェクトのビルドが遅いのは、ある程度自分でなんとかできる • → 並列数を上げるだけで、コスパよく気持ちの良い開発ができるように! ◦ 金の弾丸があれば、Elite Planを湯水のごとく使おう 15 総ホールド時間を基準にした理由
16
• 「ビルドして」トリガー ◦ Bitriseは現状Pushしたときに発火するトリガーのみ ◦ 定期的にチームや社内向けにアプリを配布したい!けど ◦ 配布物を作るビルドは長いので、必要なときだけ走らせたい! ▪ ユニットテストだけPushで走らせる
▪ だいたい半分くらいの時間 • 社内配布アプリの一覧ページ(あまりうまく機能しなかった) 17 その他の取り組み事例
18 とても便利
• GitHubのPRにコメントしたら、ビルドが走るようにする ◦ ポイントはPRトリガーとして実行すること ▪ PRにコメントするステップでPRの番号が取れない ◦ GitHub Actions使いたい 19
トリガーをGASで自作 「ビルドして」だった らAPI叩く WebHook Pull Request 結果を通知 GAS Bitrise
20 https://gist.github.com/kvvzr/8be18b134b3da1828bf0905df2625d40
• comment-on-github-pull-request っていうコミュニティステップ作った ◦ https://github.com/kvvzr/bitrise-step-comment-on-github-pull-request • PRに配布物へのリンク(QRコード)が紐づくと、過去のあの変更でどうなったか、追いやす くて良い ◦ Slackだけに流すと探すのが大変
21 宣伝: GitHubにコメントするステップ
• Bitriseはいいぞ • 置かれている環境によって計測してプランを検討しよう ◦ 他社がどういうプラン使っているのか調べても出てこなくてつらかった ◦ ワークフローに無駄がある場合もある。計測すると気付ける • GASなどを使えば計測もトリガーも手軽に自作できる
• ステップも簡単に作れるので、秘伝のタレを持っていたらステップ化しよう! スライド中にあるBitriseの価格は2019年2月21日のものです 22 まとめ