Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub self-hosted runner を利用した独自の CI プラットフォームの開発と運用 | CI/CD Conference 2023 by CloudNative Days 前夜祭

Shun
February 27, 2023

GitHub self-hosted runner を利用した独自の CI プラットフォームの開発と運用 | CI/CD Conference 2023 by CloudNative Days 前夜祭

2023/02/27 に開催された CI/CD Conference 2023 by CloudNative Days 前夜祭の発表資料です。
https://cloudnativedays.connpass.com/event/274402/

Shun

February 27, 2023
Tweet

More Decks by Shun

Other Decks in Technology

Transcript

  1. ©MIXI ⾃⼰紹介 【名前】 多⽻⽥ 俊(たばた しゅん) 【所属】株式会社 MIXI 開発本部 CTO

    室 SRE グループ 【来歴】 •前職では主に Web アプリケーションのバックエンド開発を中⼼ に、フロントや iOS アプリの開発も経験 •現在は主に会社の基盤システムの設計から開発・保守・運⽤や、 プロジェクトへの DevOps ⽀援などを⾏なっている •アプリの開発経験から、最近はアプリの CI/CD の導⼊⽀援など を⾏なっている -好きなこと- 猫(2匹飼ってます)、⾳楽、 作曲、お酒 - Twitter - @bbq_all_stars
  2. ©MIXI アプリ開発における問題 Bitrise による新プラン発表 •今回の開発を考えることになったきっかけ •MIXI では扱いの⼿軽さ、安さからおよそ 3/4 程度のプロジェクトで利 ⽤

    •2021/8/19 に新プランが発表。これまで同時ビルド数ベースだったのが、 ビルド時間ベースに変更されるとアナウンス •プロジェクトによっては価格が 10 倍になるところも •その後の発表で、旧プランは継続利⽤することができるようになったも のの、今後いつまで旧プランを使い続けられるかどうか不透明
  3. ©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 •少⼈数で保守・運⽤するにはつらそう
  4. ©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
  5. ©MIXI Bitrise を⾒てみる •コアの部分は Vagrant を使っている模様 •仮想化した Mac でビルドする⽅法を GitHub

    で 公開していた(現在は⾮公開:アーカイブ) •これによると Vagrant + VMWare vSphere を使 っていそう •vSphere は開発時点(2022/04)で Apple Silicon 未対応。Parallels Desktop は対応し始 めていた •将来的なことを考えると、Vagrant + Parallels Desktop が使えるのでは? CI プラットフォームを⾃前で作れないだろうか?
  6. ©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 プラットフォームを⾃前で作れないだろうか?
  7. ©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 を監視 作ったもの ① ② ③ ④,⑤ ⑥
  8. ©MIXI ビルド終了時の流れ 1. self-hosted runner がビルドを終了すると、GitHub 側に通知される 2. リポジトリにインストールされた GitHub

    App は、 GitHub Actions の終了の webhook を送信 3. API Gateway が webhook を受信し、 Lambda で処 理して仮想環境破棄のメッセージを end の SQS に送 信 4. 環境構築後の worker は end の SQS のメッセージを 取得し、⾃分が構築した環境かどうかを確認する 5. 構築した環境であれば終了のスクリプトを実⾏して、 環境を破棄する 作ったもの ① ② ③ ④ ⑤
  9. ©MIXI ストレージが逼迫する問題 •Vagrant の box ファイルは 30GB ぐらい。 box ファイルの実態は

    .tar.gz なので、使⽤時に解凍する 必要がある •解凍すると 40 GB ぐらいになる •当初はストレージの少ない社内の余った Mac で運⽤することを想定し、box ファイルは S3 に置いて、 ビルド時に都度ダウンロードを⾏うことを想定していた •古い Mac の NIC は最⼤で 1Gbps と遅く、box ファイルのダウンロードに10分ぐらいかかってしまう •box を事前にマシンにインストールしておくことにした •結果 1 TB の Mac を運⽤することになった 運⽤における課題
  10. ©MIXI box ファイルの管理問題 •新しい OS やビルドツールがリリースされたら box を新しく追加する必要がある •古いツールも定期的にアップデートしていく必要がある •CI

    で⾃動化しようにも、Parallels Desktop のライセンスがないと box ファイルをアップデートでき ない •いずれなんとかしたい 運⽤における課題
  11. ©MIXI ビルド速度のオーバーヘッド •仮想環境を使っているのでオーバーヘッドがある •仮想環境を使わずに self-hosted runner を動かすよりは遅い •およそ 7割 ぐらいの速度

    •今のところは強いスペックのマシン(12コア)を⽤意して 仮想環境に割り当てる vCPU 数を増やして対応 •Apple Silicon のビルドは倍近く早いらしいので、そちらへの移⾏を検討中 運⽤における課題
  12. ©MIXI 監視周り •今回は社内にあった Mac マシンを使⽤しているが、実は Mac に対応している監視サービスが少ない •当初は New Relic

    や Datadog の利⽤を想定していたが、ベータ版や⼀部の機能が使えなかったりした ため、CloudWatch Agent になった •CloudWatch はメトリクスの数が増えていくと、ダッシュボードでの表⽰が重くなる問題があるため、 いずれ Mac の台数が増えると⼤変になりそう 運⽤における課題
  13. ©MIXI その他 •古い OS の box のサポート終了問題 •仮想環境を実⾏するマシンは⼿動追加 •Apple Silicon

    対応 •runner のインストールスクリプトの更新 •ログのトレーサビリティが低い問題 運⽤における課題
  14. ©MIXI エンタメ×テクノロジーの⼒で、 世界のコミュニケーションを豊かにする サービスの創出を⽬指しています。 MIXI GROUPは、友だちや家族といった 親しい⼈々とのコミュニケーションを活性化する、 様々なサービスを開発・提供しています。 現在、スポーツ・ライフスタイル・デジタルエンターテインメント の3つの領域で事業を展開しており、

    それぞれの主な事業内容は右の通りです。 また、近年の投資活動の拡⼤と重要性を勘案し、 FY2023からはスタートアップやファンド出資等の投資活動を事業化しました。 スポーツ事業 プロスポーツチーム運営および 公営競技ビジネスの推進 ライフスタイル事業 インターネットを活⽤し、 ⼈々の⽣活に密着したサービスの提供 デジタルエンターテインメント事業 スマホゲームを中⼼としたゲームの提供 .*9*(3061ͷࣄۀྖҬ 3つの領域で “コミュニケーションの活性化” に向けた事業を推進