CIをGASで継続的に改善したら幸せになったCI/CD Test Night #3pixiv Inc.kwzr / Kazumasa Kawazure2019.02.21
View Slide
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を使っていた5Bitriseに移行した流れ
● 言わずと知れたモバイルアプリ向けCIサービス● GUIでワークフローやトリガーを操作できる。UIがかわいい(重要)● 他CIサービスと比べても比較的安価● アプリの配布機能もある(Deploy to Bitrise.io)● とてもよい!6Bitriseとは
● 最初は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叩くWebHookPull Request結果を通知GASBitrise
20https://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まとめ