Slide 1

Slide 1 text

©MIXI GitHub self-hosted runner を 利⽤した独⾃の CI プラットフ ォームの開発と運⽤ 2023/02/27 株式会社 MIXI 開発本部 CTO 室 SRE グループ 多⽻⽥ 俊

Slide 2

Slide 2 text

©MIXI ⽬次 •⾃⼰紹介 •アプリのビルドにおける問題 •CI プラットフォーム開発の検討 •開発したもの •運⽤における問題 •まとめ •宣伝

Slide 3

Slide 3 text

©MIXI ⾃⼰紹介 【名前】 多⽻⽥ 俊(たばた しゅん) 【所属】株式会社 MIXI 開発本部 CTO 室 SRE グループ 【来歴】 •前職では主に Web アプリケーションのバックエンド開発を中⼼ に、フロントや iOS アプリの開発も経験 •現在は主に会社の基盤システムの設計から開発・保守・運⽤や、 プロジェクトへの DevOps ⽀援などを⾏なっている •アプリの開発経験から、最近はアプリの CI/CD の導⼊⽀援など を⾏なっている -好きなこと- 猫(2匹飼ってます)、⾳楽、 作曲、お酒 - Twitter - @bbq_all_stars

Slide 4

Slide 4 text

©MIXI アプリ開発における問題

Slide 5

Slide 5 text

©MIXI アプリ開発における問題 ビルドに時間がかかる •iOS、Android、Web、Windows、Unity AssetBundle、Flutterなど、 様々なフレームワークやプラットフォーム向けにビルドする必要があ る •ライブラリの肥⼤化とビルド時間 CI サービスにおける料⾦が⾼い問題 •特に Mac でのビルドの料⾦が⾼い •GitHub Actions の Mac の料⾦は Linux の 10 倍のお値段

Slide 6

Slide 6 text

©MIXI アプリ開発における問題 ゲームの場合は⼤容量を必要とする •特にアセットのファイルが容量を⾷う •場合によっては数GBとか必要とするケースも •キャッシュを使うにしても、キャッシュファイルのダウンロード、アッ プロードにも時間がかかる なら Jenkins で⾃前運⽤? •つらい •マネージドされたい •Java の脆弱性対応や node の管理がつらい •Jenkins おじさんが必要

Slide 7

Slide 7 text

©MIXI アプリ開発における問題 Bitrise による新プラン発表 •今回の開発を考えることになったきっかけ •MIXI では扱いの⼿軽さ、安さからおよそ 3/4 程度のプロジェクトで利 ⽤ •2021/8/19 に新プランが発表。これまで同時ビルド数ベースだったのが、 ビルド時間ベースに変更されるとアナウンス •プロジェクトによっては価格が 10 倍になるところも •その後の発表で、旧プランは継続利⽤することができるようになったも のの、今後いつまで旧プランを使い続けられるかどうか不透明

Slide 8

Slide 8 text

©MIXI CI プラットフォームを⾃前で作れないだろうか?

Slide 9

Slide 9 text

©MIXI CI プラットフォームを⾃前で作れないだろうか? 要件 •開発にそこまで時間をかけられないので、少⼈数でも運⽤できるような規模が⼩さなものが良い •なるべくなら料⾦を抑えたい •複数の環境に対応できるようなもの •マネージドサービスを活⽤

Slide 10

Slide 10 text

©MIXI CI プラットフォームを⾃前で作れないだろうか? GitHub の self-hosted runner •⾃前のマシンにインストールすることで Github Actions を実⾏できる •お値段が無料 •様々な Actions が公開されているため、それを利⽤すればビルドワークフローが簡単に構築できる •ただし、インストールした runner は、30⽇以上 GitHub Actionsに接続されないと⾃動的に削除され てしまう •そのため、単体ではマシンを常に稼働させておく必要がある •動的に runner をインストールして、ビルドを実⾏させる仕組みを OSS で公開しているものはある • actions/actions-runner-controller • philips-labs/terraform-aws-github-runner •少⼈数で保守・運⽤するにはつらそう

Slide 11

Slide 11 text

©MIXI CI プラットフォームを⾃前で作れないだろうか? myshoes •CyberAgent の Tachibana waita さん が開発した CI プラットフォーム • https://www.slideshare.net/whywaita/cyberagent-oss-cicd-myshoes-cicd2021 •動的に GitHub Actions の self-hosted runner を実⾏するところは philips-labs のものと同じ •こちらは AWS、Google Cloud、OpenStack 等に対応 •GitHub App から webhook を受けとって動的にインスタンスを⽴ててビルドする •GitHub App を使った seld-hosted runner の動的な仕組みは使えそう Copyright (c) 2021 whywaita https://github.com/whywaita/myshoes/blob/master/LICENSE

Slide 12

Slide 12 text

©MIXI Bitrise を⾒てみる •コアの部分は Vagrant を使っている模様 •仮想化した Mac でビルドする⽅法を GitHub で 公開していた(現在は⾮公開:アーカイブ) •これによると Vagrant + VMWare vSphere を使 っていそう •vSphere は開発時点(2022/04)で Apple Silicon 未対応。Parallels Desktop は対応し始 めていた •将来的なことを考えると、Vagrant + Parallels Desktop が使えるのでは? CI プラットフォームを⾃前で作れないだろうか?

Slide 13

Slide 13 text

©MIXI まとめると以下 •GitHub App + GitHub self-hosted runner + Vagrant + Parallels Desktop を使⽤すれば、さまざま な環境に対応したビルドができそう •self-hosted runner なのでお値段は無料なので嬉しそう •既存の Actions も利⽤できる •Vagrant を実⾏するマシンは、社内の余っているマシンを使うと嬉しそう •GitHub App の webhook を受けるシステムと、そこから動的に環境を構築/破棄するシステムは開発 する必要がありそう • webhook を受ける部分は、AWS の API Gateway + Lambda + SQS あたりを使えば良さそう • あとは、SQS からメッセージを取り出して、動的に環境を構築/破棄するプログラムを作れば良さそう CI プラットフォームを⾃前で作れないだろうか?

Slide 14

Slide 14 text

©MIXI というわけで作った

Slide 15

Slide 15 text

©MIXI 作ったもの

Slide 16

Slide 16 text

©MIXI 作ったもの

Slide 17

Slide 17 text

©MIXI ビルド時の流れ 1. GitHub App が GitHub Actions の開始の webhook を送信 2. API Gateway が webhook を受信し、 Lambda で処 理して仮想環境構築のメッセージを start の SQS に 送信 3. 各マシンで動いている worker は start の SQS のメ ッセージを取得し、Parallels Desktop で動的に環境 を構築 4. 構築した環境で GitHub の self-hosted runner をイ ンストールするスクリプトを実⾏ 5. インストールされた self-hosted runner は⾃動でビ ルドを実⾏ 6. worker は環境を破棄するまで end の SQS を監視 作ったもの ① ② ③ ④,⑤ ⑥

Slide 18

Slide 18 text

©MIXI ビルド終了時の流れ 1. self-hosted runner がビルドを終了すると、GitHub 側に通知される 2. リポジトリにインストールされた GitHub App は、 GitHub Actions の終了の webhook を送信 3. API Gateway が webhook を受信し、 Lambda で処 理して仮想環境破棄のメッセージを end の SQS に送 信 4. 環境構築後の worker は end の SQS のメッセージを 取得し、⾃分が構築した環境かどうかを確認する 5. 構築した環境であれば終了のスクリプトを実⾏して、 環境を破棄する 作ったもの ① ② ③ ④ ⑤

Slide 19

Slide 19 text

©MIXI これでビルドを回しまくれる!!

Slide 20

Slide 20 text

©MIXI …と思っていた⾃分がいました

Slide 21

Slide 21 text

©MIXI ストレージが逼迫する問題 •Vagrant の box ファイルは 30GB ぐらい。 box ファイルの実態は .tar.gz なので、使⽤時に解凍する 必要がある •解凍すると 40 GB ぐらいになる •当初はストレージの少ない社内の余った Mac で運⽤することを想定し、box ファイルは S3 に置いて、 ビルド時に都度ダウンロードを⾏うことを想定していた •古い Mac の NIC は最⼤で 1Gbps と遅く、box ファイルのダウンロードに10分ぐらいかかってしまう •box を事前にマシンにインストールしておくことにした •結果 1 TB の Mac を運⽤することになった 運⽤における課題

Slide 22

Slide 22 text

©MIXI box ファイルの管理問題 •新しい OS やビルドツールがリリースされたら box を新しく追加する必要がある •古いツールも定期的にアップデートしていく必要がある •CI で⾃動化しようにも、Parallels Desktop のライセンスがないと box ファイルをアップデートでき ない •いずれなんとかしたい 運⽤における課題

Slide 23

Slide 23 text

©MIXI ビルド速度のオーバーヘッド •仮想環境を使っているのでオーバーヘッドがある •仮想環境を使わずに self-hosted runner を動かすよりは遅い •およそ 7割 ぐらいの速度 •今のところは強いスペックのマシン(12コア)を⽤意して 仮想環境に割り当てる vCPU 数を増やして対応 •Apple Silicon のビルドは倍近く早いらしいので、そちらへの移⾏を検討中 運⽤における課題

Slide 24

Slide 24 text

©MIXI 監視周り •今回は社内にあった Mac マシンを使⽤しているが、実は Mac に対応している監視サービスが少ない •当初は New Relic や Datadog の利⽤を想定していたが、ベータ版や⼀部の機能が使えなかったりした ため、CloudWatch Agent になった •CloudWatch はメトリクスの数が増えていくと、ダッシュボードでの表⽰が重くなる問題があるため、 いずれ Mac の台数が増えると⼤変になりそう 運⽤における課題

Slide 25

Slide 25 text

©MIXI その他 •古い OS の box のサポート終了問題 •仮想環境を実⾏するマシンは⼿動追加 •Apple Silicon 対応 •runner のインストールスクリプトの更新 •ログのトレーサビリティが低い問題 運⽤における課題

Slide 26

Slide 26 text

©MIXI (いろいろ問題はあるけど) これでビルドを回しまくれる!!

Slide 27

Slide 27 text

©MIXI •アプリのビルドにはビルド時間や料⾦などの様々な問題がありました •その問題を解決するため独⾃の CI プラットフォームを開発しました •⼀⽅で運⽤を始めるとストレージをはじめ、いくつかの問題が⽣じました •それらの問題に対応しつつ運⽤をしています まとめ

Slide 28

Slide 28 text

©MIXI 最後に宣伝

Slide 29

Slide 29 text

©MIXI エンタメ×テクノロジーの⼒で、 世界のコミュニケーションを豊かにする サービスの創出を⽬指しています。 MIXI GROUPは、友だちや家族といった 親しい⼈々とのコミュニケーションを活性化する、 様々なサービスを開発・提供しています。 現在、スポーツ・ライフスタイル・デジタルエンターテインメント の3つの領域で事業を展開しており、 それぞれの主な事業内容は右の通りです。 また、近年の投資活動の拡⼤と重要性を勘案し、 FY2023からはスタートアップやファンド出資等の投資活動を事業化しました。 スポーツ事業 プロスポーツチーム運営および 公営競技ビジネスの推進 ライフスタイル事業 インターネットを活⽤し、 ⼈々の⽣活に密着したサービスの提供 デジタルエンターテインメント事業 スマホゲームを中⼼としたゲームの提供 .*9*(3061ͷࣄۀྖҬ 3つの領域で “コミュニケーションの活性化” に向けた事業を推進

Slide 30

Slide 30 text

©MIXI .*9*ॳͷςοΫΧϯϑΝϨϯεΛ։࠵ʂʂ

Slide 31

Slide 31 text

©MIXI