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

ゲーム開発のCI/CDを支えるJenkins運用 ~MacStadium 活用とディスク容量との闘い~【DeNA TechCon 2022】

ゲーム開発のCI/CDを支えるJenkins運用 ~MacStadium 活用とディスク容量との闘い~【DeNA TechCon 2022】

Lightning Talks vol.1

資料内でのリンク集:
p10, https://swet.dena.com/entry/2021/07/12/120000

◆ You Tube
https://youtu.be/9heaFqbWP94

◆ You Tube チャンネル登録はこちら↓
https://youtube.com/c/denatech?sub_confirmation=1

◆ Twitter
https://twitter.com/DeNAxTech

◆ DeNA Engineering
https://engineering.dena.com/

◆ DeNA Engineer Blog
https://engineering.dena.com/blog/

◆ DeNA TechCon 2022 公式サイト
https://techcon2022.dena.dev/spring/

DeNA_Tech
PRO

March 17, 2022
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. ゲーム開発のCI/CDを支える
    Jenkins運用
    ~ MacStadium 活用とディスク容量との闘い ~
    品質管理部 SWET第二グループ 井口 恒志

    View Slide

  2. TABLE CONTENTS
    1. オンプレからクラウドへのシフト
    2. ディスク容量との闘い
    1. オンプレmac -> MacStadium
    1. ディスク容量の逼迫
    2. 自動お掃除

    View Slide

  3. 1. オンプレからクラウドシフト
    ● 開発初期
    ○ CIツールとして Jenkins を利用
    ○ agent には オンプレ mac / Ubuntu(GCP) を活用
    ● 開発中期
    ○ 開発メンバー増加に伴い agent 増加
    ○ 昨今の情勢からリモートワークへ移行
    ○ オンプレ mac の突然死やメンテ(OS updateなど)のため出社が必要
    オンプレ macではなくクラウドを活用したい

    View Slide

  4. 1. オンプレからクラウドシフト
    ● 開発初期
    ○ CIツールとして Jenkins を利用
    ○ agent には オンプレ mac / Ubuntu(GCP) を活用
    ● 開発中期
    ○ 開発メンバー増加に伴い agent 増加
    ○ 昨今の情勢からリモートワークへ移行
    ○ オンプレ mac の突然死やメンテ(OS updateなど)のため出社が必要
    ● 現在
    ○ 新規追加分の macOS は IaaS として提供している MacStadium を活用
    ○ ハードやネットワーク関連で問題は MacStadium サポートへ連絡
    ○ マシンの再起動などは管理コンソールから実施

    View Slide

  5. ゲームアプリの開発ではアセットなどの
    サイズが大きいファイルを扱うことが多い
    ディスク容量の逼迫問題発生!!
    逼迫の別要因
    オンプレ mac は 2TB だったのに対して MacStadium は 1TB
    今後リリース予定のイベントなど開発は並行して実施されるため
    複数ブランチでのビルドを多数実施

    View Slide

  6. 2. ディスク容量との闘い
    ● agent マシンのディスク使用量の監視
    ○ 使用量 85% で WARNING、95% で CRITICAL として通知
    ○ 通知を受けるとマシン内のディスク使用量を細かく調査して不要データ削除
    ● 開発が進み並行開発が始まると WARNING が頻発
    ○ 削除可能なファイル等を更新履歴などから判断
    1. docker の不要イメージ、コンテナのデータ
    2. Xcode(iOS向けアプリ) の Archive, DerivedData などのデータ
    3. 利用されていないもしくは古い Jenkins Job ワークスペース
    マシン数も多いので手動では高コスト
    これらのデータ自動削除するジョブを整備

    View Slide

  7. 2. ディスク容量との闘い
    1. docker の不要イメージ、コンテナのデータ
    2. Xcode の Archive, DerivedData などのデータ
    # find を活用して n 日以内にアクセスされていないディレクトリを対象に削除
    $ find "$HOME/Library/Developer/Xcode/Archives/" -atime +n -maxdepth 1
    $ find "$HOME/Library/Developer/Xcode/DerivedData/" -atime +n -maxdepth 1
    # 30日間利用されていないデータを対象に削除
    $ docker system prune -f --all --filter "until=720h"

    View Slide

  8. 2. ディスク容量との闘い
    3. 利用されていないもしくは古い Jenkins Job ワークスペース
    ○ Job のワークスペース内は以下のような仕組みで開発ブランチ毎に分割
    ○ 単純にJobのワークスペース削除ではなく開発ブランチ毎にチェックして削除
    Jenkins Job name: ios-app-build
    並行開発: v1.0, v1.1, v1.2
    ios-app-build |- v1.0 |- v1.1 |_ v1.2 # ディレクトリ内のファイルが n 日以内にアクセス、ステータス修正がないものを対象に削除
    $ find "$BRANCH_DIR" -ctime -n

    View Slide

  9. 2. ディスク容量との闘い
    ● 以下の要因から物理的な容量制限はどうにもできない
    ○ 並行開発数の増加
    ○ Jenkins Job の増加(大容量のデータを扱うJobなど)
    ただし!
    ● 対策
    ○ MacStadium のSSD容量を 2TBに契約変更
    ■ 通常は 1TBが最大なためサポートに問い合わせて特別契約
    ○ マシン毎に担当する Job を分割
    ■ ios / android などのプラットフォーム毎

    View Slide

  10. まとめ
    ● Jenkins agent を オンプレからクラウドシフト
    ○ 主に オンプレ mac を MacStadium へ
    ● 並行開発に耐えうるためにディスク掃除を自動化
    ○ 手動作業の自動化によって工数削減
    ● 掃除の自動化だけでなく他の対策も実施
    ○ MacStadium の 1TB -> 2TB へ契約変更
    ○ agent 毎に担当する Job を分割
    ● SWETでは他にもGitの仕組みを活用したディスク使用量の削減なども実施
    ○ 「大きなGitリポジトリをクローンするときの工夫を図解します」
    ■ https://swet.dena.com/entry/2021/07/12/120000

    View Slide