UnityのビルドをJenkinsおじさんにおまかせして自動化するハンズオン

jenkins

はじめに

enishのプロジェクトではUnityCloudBuildではなくJenkinsですべてのUnityビルドを賄っています。
今からUnityの自動ビルドを個人でしたい場合

  • Jenkins
  • UnityCloudBuild

の2択になると思います。

結論からいえばUnityCloudBuildの方がおおよそ簡単です。
一方色々なカスタマイズできるのがJenkinsの利点です。
ですので込み入ったことをしたくなったり、開発規模が少し大きくなるとJenkinsの方がよいかなぁと思います。
またUnityCloudBuildAPIも公開されているのでJenkins経由でそれをたたく方法もあります。

プロダクトではUnityのビルド以外にもサーバーのデプロイやら静的解析やら画像の自動加工やらなんやらもJenkinsでやっているのでJenkinsを利用しています。

そういうわけで今回はソフトウェアインストール時間を除いて1時間くらいでAndroidとWindowsのビルドを作れるキットを用意しました
iOSはちょっとxcodeとか破壊的仕様変更とかもあるんで置いときます。

前提

このハンズオンはWindows 10での手順のみ記述しています。
なぜならWindowsが簡単だからです。

もしもiOSのビルドを追加する場合は、xcodeのインストールされているマシンをスレーブにするといいでしょう。

また、githubのアカウント登録を済ませていてください。

1.準備

とりあえずJenkinsとUnityとそれからAndroidStudioをさらにgitもインストールしましょう。

Jenkins

Jenkinsのダウンロードページ
LTS ReleaseのプルダウンメニューからWindowsのインストーラをダウンロードしてきてインストールしましょう。

インストールが終わると「ローカルのあなただけのJenkins」が立ち上がっているはずです。
ただ初期設定とかあるのでちょっと置いておいてください。次の章でいろいろ設定します。

 

AndroidStudio

AndroidStudioのダウンロードページ
こちらもダウンロードしてインストールしましょう。

途中の「Android SDK Installation Location」のパスはメモしておきましょう。Unityで設定します。
通り過ぎてしまった場合は基本的に以下のパスになるはずです。
「C:\Users\ユーザー名\AppData\Local\Android\sdk」

また、AndroidStudioの動作のためにJDKが必要になってくるのでそちらも入れておきましょう。
Java SE Development Kit 8

Git for Windows

Git for Windowsのダウンロードページ
こちらをインストールします。

無題
「Adjusting your PATH environment」の項目の「Use Git and optional Unix tools from Windows Command Prompt」(3番目の赤字で注意書きが書いてあるもの)を選択してください。

そのあとコマンドプロンプトでlsコマンドが使えることを確認してください。

Bash on Ubuntu on Windowsでもいいのかなとは思いますが試していないのでサポートはできません。

トラブルシューティング

  • lsコマンドが使えない -> 環境設定からPATHに「C:\Program Files\Git\usr\bin」を追加してください。

gitのssh接続

以下のようなページを参考にして、githubアカウントにssh接続できるように設定してください。

PowerShell

PowerShellで$PSVersionTableをたたいてPSVersionが5以上でなければこちらのページを参考にインストールしてください。
Windows Power Shell 5.0 を Windows7 にインストールする手順

Unity

インストールできてますよね?
もちろんAndroidSupportは必須になります。

このハンズオンではAndroidのsdkをUnityに教える必要があるため、File -> Preferences -> External Tools -> Androidのsdkのパスを先ほどコピーしたsdkのパスを設定してあげます。

基本的には「C:\Users\ユーザー名\AppData\Local\Android\sdk」です。

2.Jenkinsの設定

各種ソフトウェアのインストールが終わったらJenkinsの設定をします。

 

サービスユーザーの変更

スタートメニューの検索にサービスと入れて「サービス」を起動します。
2017-03-22

そうするとWindowsサービスの一覧が立ち上がるのでJenkinsという項目を探してダブルクリックします。
プロパティが出てくるのでログオンの設定を自分の今使っているアカウントにします。

無題

最後にこのサービスの再起動をします。

こうすると、Jenkinsのホームディレクトリが自分のホームディレクトリ%USERPROFILE%と一致します。
(JENKINS_HOMEのことではないです。)
認証情報なしでgitプラグインを使うには一番楽な設定方法です。

初期設定

いよいよ「あなただけのJenkins」の設定に移ります。

Unlock Jenkins

初めてJenkinsページに行くとUnlock Jenkinsというページがあると思います。
書いてあるとおり「C:\Program Files (x86)\Jenkins\secrets\initialAdminPassword」にパスワードが入っているのでそれを入れましょう。

Customize Jenkins

Customize JenkinsページはInstall Suggested pluginsを選択します。

Create First Admin User

適当でいいです。
もしユーザーめんどくさいなと思ったらローカルなので「グローバルセキュリティの設定」の権限管理を全員に許可にしてもいいです。

プラグインのインストール

プラグインマネージャから以下の4つのプラグインをインストールします。

  • ThinBackup
  • Copy Artifact Plugin
  • Unity3d plugin
  • PowerShell plugin

設定の読み込み

こちらに今回のハンズオンで使うキットを用意したのでこちらを使っていきます。(後でurl修正)
UnityJenkinsHandson

こちらのJenkinsディレクトリにJenkinsの設定ファイルを置いています。
これをダウンロードしてきます。

ThinBackup設定ページの「Backup directory」の項目に「ダウンロードしたパス/Jenkins」と入れます。(ダウンロードしたパスは置き換えてください)

そのあと Restore Configurationのrestore backup fromの項目に「2017-01-01_00-00」というものが現れているはずなのでそのままRestoreボタンを押して再起動します。
再起動ページ

そうするとJenkinsにいくつかのジョブができています。

トラブルシューティング

  • 2017-01-01_00-00が現れない -> Backup directoryの設定が間違っている可能性があります
  • 再起動後なかなかJenkinsが立ち上がらない -> サービスから再起動してみましょう。それでもだめならタスクマネージャーにJavaがあればそれを停止してみて再起動します。

ビルド

BuildPipelineパラメータ付きビルドからビルドするとしばらくするとAndroidとWindowsのビルドができるはずです!

それぞれのzipとapkファイルもリンクがBuildPipelineに出現するはず!

この時できるのはUnityJenkinsHandson
のプロジェクトなのでここまですんなりいけた方は次の章へ進んで自分のプロジェクトに差し替えてください。

トラブルシューティング

なかなかうまくいかない気もするのでトラブルシューティングです。

各ビルドのコンソール出力から問題を考えます。

共通

Please make sure you have the correct access rights
and the repository exists.

gitのssh接続は正しく設定できていますか?

できている場合システム情報から見えるUSERPROFILEに.sshファイルが正しく存在しますか?

FATAL: The configured Unity3d installation directory (C:\Program Files\Unity) is not recognized as a Unity3d home directory. Remember that the plugin adds per-platform suffixes and is searching for the executable at C:\Program Files\Unityh\Editor\Unity.exe.
Build step 'Invoke Unity3d Editor' marked build as failure

UnityのインストールパスはC:\Program Files\Unityですか?そうでない場合Global Tool Configurationから設定してください。

Android

 

InvalidOperationException: Error building Player: UnityException: Build failure!
Unable to locate Android SDK

SDKの位置は正しいですか?JDKの位置は正しいですか
ただしそうであれば、Unityを手動でビルドしてみてください。
詳細なエラーメッセージが出てきます。

手動で正しくビルドできた場合サービスからJenkinsのユーザーを確認してください。

Unable to list target platforms. Please make sure the android sdk path is correct. See the Console for more details.

UnityのAndroidビルドができなくなった時の対処法

Windows


compress-archive : 用語 ‘compress-archive’ は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名
前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。

powershellのバージョンはv5で正しいですか

ビルドの仕組み

少しビルドの仕組みを説明します。
BuildPipelineジョブはUnityBuildForAndroidジョブ,UnityBuildForWindowsジョブをビルドしています。
その時にBuildParametersをそれぞれのビルドパラメータとして設定しています。

UnityBuildForAndroidはUnityJenkinsHandsonを落としてきてBuildParametersを適用した後でAndroidビルドをします。Windowsも同様です。

それぞれの成果物(ビルドされたもの)はBuildPipelineに取得されてBuildPipelineの成果物としても扱われます。

あなたのプロジェクトに入れるために

Handsonをあなたのプロジェクトに差し替える

gitを前提にお話しします。無料でもvisual studio team service等あるので問題ないと思います。

  1. あなたのプロジェクトのAssets以下にUnityJenkinsHandsonのAssets以下を統合してください。
  2. UnityBuildForAndroidジョブ,UnityBuildForWindowsジョブのそれぞれの設定からソースコード管理 -> Git -> リポジトリに書かれているリポジトリを自分のリポジトリに変更してください。
  3. そのままビルドすればあなたのプロジェクトでCIができるはずです。

多彩なパラメータでビルドしたい

BuildPipelineジョブのBuildParametersの設定を変更します。

key=value形式で1行1パラメータです。
#は1行コメントにしています。

その他パラメータの詳細やコードの使い方などはUnityJenkinsHandsonのREADMEに書き入れてあります。