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

March 17, 2022
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. 1. オンプレからクラウドシフト • 開発初期 ◦ CIツールとして Jenkins を利用 ◦ agent

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

    には オンプレ mac / Ubuntu(GCP) を活用 • 開発中期 ◦ 開発メンバー増加に伴い agent 増加 ◦ 昨今の情勢からリモートワークへ移行 ◦ オンプレ mac の突然死やメンテ(OS updateなど)のため出社が必要 • 現在 ◦ 新規追加分の macOS は IaaS として提供している MacStadium を活用 ◦ ハードやネットワーク関連で問題は MacStadium サポートへ連絡 ◦ マシンの再起動などは管理コンソールから実施
  3. 2. ディスク容量との闘い • agent マシンのディスク使用量の監視 ◦ 使用量 85% で WARNING、95%

    で CRITICAL として通知 ◦ 通知を受けるとマシン内のディスク使用量を細かく調査して不要データ削除 • 開発が進み並行開発が始まると WARNING が頻発 ◦ 削除可能なファイル等を更新履歴などから判断 1. docker の不要イメージ、コンテナのデータ 2. Xcode(iOS向けアプリ) の Archive, DerivedData などのデータ 3. 利用されていないもしくは古い Jenkins Job ワークスペース マシン数も多いので手動では高コスト これらのデータ自動削除するジョブを整備
  4. 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"
  5. 2. ディスク容量との闘い 3. 利用されていないもしくは古い Jenkins Job ワークスペース ◦ Job のワークスペース内は以下のような仕組みで開発ブランチ毎に分割

    ◦ 単純にJobのワークスペース削除ではなく開発ブランチ毎にチェックして削除 Jenkins Job name: ios-app-build 並行開発: v1.0, v1.1, v1.2 ios-app-build <- Job ワークスペース |- v1.0 <- v1.0 開発ブランチ用 |- v1.1 <- v1.1 開発ブランチ用 |_ v1.2 <- v1.2 開発ブランチ用 # ディレクトリ内のファイルが n 日以内にアクセス、ステータス修正がないものを対象に削除 $ find "$BRANCH_DIR" -ctime -n
  6. 2. ディスク容量との闘い • 以下の要因から物理的な容量制限はどうにもできない ◦ 並行開発数の増加 ◦ Jenkins Job の増加(大容量のデータを扱うJobなど)

    ただし! • 対策 ◦ MacStadium のSSD容量を 2TBに契約変更 ▪ 通常は 1TBが最大なためサポートに問い合わせて特別契約 ◦ マシン毎に担当する Job を分割 ▪ ios / android などのプラットフォーム毎
  7. まとめ • Jenkins agent を オンプレからクラウドシフト ◦ 主に オンプレ mac

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