48
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

【Unity】3年目がゲーム会社でスマホゲームを開発して得た知識 Jenkins編

3年目のプログラマがUnityを使用したスマホゲームの開発に関わった時に得たことを書き残しておきます

使用したJenkinsのバージョン

  • 1.632

バージョン管理システム

  • Subversion

作成したジョブ

  • ROMを作成するジョブ
    • テストとステージングとリリース
    • AndroidとiOS
    • trunkとbranch
  • アセットバンドルを作成するジョブ
    • AndroidとiOS
    • trunkとbranch
  • サーバにアセットバンドルをデプロイするジョブ
    • テストとステージングとリリース
    • AndroidとiOS
  • サーバにhtmlをデプロイするジョブ
    • テストとステージングとリリース
  • サーバのプログラムを更新するジョブ
    • テストとステージングとリリース
  • サーバのDBを再構築するジョブ
    • テストとステージングとリリース
  • etc.

使用したプラグイン

  • Build Flow Extensions Plugin

  • Build Trigger Badge Plugin

    • ビルド履歴で自動で実行されたのか手動で実行されたのかといったがわかるようになります
  • Configuration Slicing Plugin

    • 各ジョブの基本的な設定を一括で変更できるようになります
    • カスタムワークスペースの設定を一括で行えるため、ヒューマンエラーを防ぐことができました
  • Custom Job Icon Plugin

    • ジョブ一覧にアイコンを表示できるようになります
    • APKを作るジョブにはAndroidのアイコンを表示、IPAを作るジョブにはAppleのアイコンを表示することで、どのジョブが何用なのかがわかりやすくなりました
  • EnvInject Plugin

    • 各ジョブで環境変数を設定できるようになります
    • Unityビルド時に使用するBundle Identifierや、出力するROMのファイル名の記述の重複を防ぐことができました
    • ver. 1.632ではJenkinsの環境変数${BUILD_ID}${BUILD_NUMBER}に置き換わってしまう状態だったので下記のGroovyスクリプトを使用して${BUILD_ID}を設定するようにしました
    • 参考サイト様
return [BUILD_ID:currentBuild.getTime().format("yyyy-MM-dd_HH-mm-ss")]
  • Extra Columns Plugin

    • ジョブ一覧に表示できるカラムの種類が増えます
    • 最新のビルドのコンソールログをすぐに開けるようになるので、ビルドエラー調査時の手間を少しだけ省くことができました
  • IRC Plugin

    • ビルドの結果をIRCに通知できるようになります
  • JobConfigHistory Plugin

    • 各ジョブの設定の変更履歴を残せるようになります
    • ビルドに失敗した時に、ジョブの設定を間違えていないかどうかがわかるようになりました
  • Next Executions

    • ビルドの実行予定日時を表示できるようになります
  • Sectioned View Plugin

    • ビューの表示を拡張することができます
    • 1つのビューの中でリストビューを複数表示できるため、ジョブの管理がしやすくなりました
  • Slack Plugin

    • ビルドの開始や終了をSlackに通知できるようになります
  • Sidebar-Link Plugin

    • 画面左のメニューに好きな項目を表示できるようになります
    • プラグインの管理画面に移動できる項目や、Jenkinsの再起動の項目を増やすことで操作性を向上させました
  • Simple Theme Plugin

    • HTMLやCSSを記述してJenkinsのデザインを変更できるようになります
    • リンクの下線を消して見た目をスッキリさせたり、リンクテキストにカーソルが重なったら背景色を変えることで操作性を向上させたりすることができました
    • 参考サイト様
  • Throttle Concurrent Builds Plugin

    • ジョブ実行時の排他制御ができるようになります
    • 共通のカスタムワークスペースを使用してROMやアセットバンドルを作成する時に、ビルドがバッティングしないようにするために使用しています
    • 参考サイト様
  • Timestamper

    • ビルドログでログが出力された日時や経過時間が表示できるようになります
    • ビルドに時間がかかっている時に、どの処理がボトルネックになっているのかがわかりやすくなりました

使用しなかったプラグイン

  • Build-timeout Plugin

    • ジョブにタイムアウトを設定できるようになります
    • 便利ですが今回は使用する機会がありませんでした
  • Copy Artifact Plugin

    • 他ジョブの成果物を使用できるようになります
    • 便利ですが今回は使用する機会がありませんでした
  • Copy project link plugin

    • ジョブを複製できるようになります
    • 便利ですが今回は使用する機会がありませんでした
  • PegDown Formatter Plugin

    • ジョブの説明欄をMarkdownで記述できるようになります
    • ジョブ一覧で説明文の上下に空白ができてしまい、見辛くなってしまったので使用しないことになりました

細かい設定

  • リストビューのビルドボタンはジョブ名の左側に移動
    • デフォルトだと右端に表示されており、別のジョブのビルドボタンを間違って押してしまう可能性があったため
  • リストビューにジョブ名ではなく説明文を表示
    • 英数字表記のジョブ名よりも日本語表記の説明文の方がわかりやすいため
    • ジョブ名表示だと、branchが増えてきた時にジョブの把握が難しくなってしまった
    • 説明文はhtmlタグを使用できるため、色を変更して説明を強調することが可能 (「グローバルセキュリティの設定」の「マークアップ記法」を「Raw HTML」に変更する必要があります)
  • リリース用のROMを作成するジョブは、バージョンの上げ忘れを防ぐために「ビルドのパラメータ化」を使用して事前確認を行えるように設定
  • ROMビルド時に${JOB_NAME}${BUILD_ID}${BUILD_NUMBER}${SVN_REVISION}を引数に渡してC#のスクリプトに埋め込み、デバッグメニューでそのROMを作成したジョブ、作成日時、番号、リビジョンを見れるように実装
    • 不具合報告が上がってきた時に適切なROMで動作確認しているかどうかがわかるようになります
  • SVNコミット直後にビルドを走らせると、そのコミットが含まれずにROMやアセットバンドルの作成が開始してしまうことがあったため、SVNのリポジトリURLの末尾に「@HEAD」と記述して対応
  • Unityバッチビルドで失敗した場合はEditorApplication.Exit( 1 );を呼び出すように実装
    • この処理を忘れてしまうとビルドに失敗してもJenkinsの表示上は成功になってしまうため
var result = BuildPipeline.BuildPlayer( 
    levels, 
    locationPathName, 
    BuildTarget.Android, 
    options 
);

if ( result == null || result == "" )
{
    return;
}

EditorApplication.Exit( 1 );

よく使うURL

URL 説明
[JenkinsのURL]/scm/SubversionSCM/enterCredential SVNの認証
[JenkinsのURL]/restart Jenkinsの再起動
[JenkinsのURL]/safeRestart Jenkinsの再起動(ジョブの実行完了を待つ)
[JenkinsのURL]/threadDump スレッドダンプ
[ジョブのURL]/build ジョブのビルド
[ジョブのURL]/lastBuild/ ジョブの最新ビルド
[ジョブのURL]/lastStableBuild/ ジョブの最新の安定ビルド
[ジョブのURL]/lastSuccessfulBuild/ ジョブの最新の成功ビルド
[ジョブのURL]/lastFailedBuild/ ジョブの最新の失敗ビルド
[ジョブのURL]/lastUnsuccessfulBuild/ ジョブの最新の不成功ビルド
[ジョブのURL]/lastBuild/api/xml?xpath=//changeSet/item/msg&wrapper=changes 最新ビルドの変更履歴
[ビルド結果のURL]/console コンソール出力
[ビルド結果のURL]/consoleFull コンソール出力(すべてのログ)

Mac miniとMac Pro

  • 最初はJenkinsマシンとしてMac miniを使用していましたが、ビルド時間短縮のために途中からMac Proに移行しました
ROM Mac mini Mac Pro
Android 約6分 約3分
iOS 約25分 約12分

参考サイト様

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
48
Help us understand the problem. What are the problem?