macでUnityのビルド〜HockeyAppへアップロードまでを自動化する手順

# Jenkinsのインストール

[OS XにJenkinsをHomebrewでセットアップする](http://qiita.com/makoto_kw/items/cbe93d4ebbc35f3b43fd)
の記事を参考にインストールおよび起動コマンドのカスタマイズを行う。

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

[CloudBees Folders Plugin](https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Folders+Plugin)　フォルダを作成し、ジョブを階層的に管理できるようになります
[Git Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin)　Gitを使用する為に必要です
[Gitlab Hook Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin)　Gitlab用にカスタマイズされており便利です
[HockeyApp Plugin](https://wiki.jenkins-ci.org/display/JENKINS/HockeyApp+Plugin)　HockeyAppへのアップロードなどを簡単に行えるようになります
[Xcode Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin)　Xcodeでビルドするのに必要です
[Build Pipeline Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Build+Pipeline+Plugin)　ビルドパイプラインを作成できます
[Unity3dBuilder Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Unity3dBuilder+Plugin)　Unityでのビルドを簡単に行えます

# Unityのインストール

今回インストールするバージョンは5.0.2f1と5.1.0b6です。

## Unity 5.0.2f1のインストール

1. [こちら](http://unity3d.com/get-unity/download?ref=personal)よりダウンロードします。
※パッチ適用版をダウンロードする場合は[こちら](http://unity3d.com/unity/qa/patch-releases)
1. ダウンロードしたdmgファイルを実行します。
1. 画面に従いインストールします。
1. アプリケーションフォルダ配下に「Unity」フォルダが作成されます。
1. 「Unity」フォルダを「Unity5.0.2f1」にリネームします。
1. 「Unity5.0.2f1」フォルダ内の「Unity」アプリケーションのエイリアスを作成し、デスクトップにコピーする。
1. デスクトップにコピーしたエイリアスを「Unity5.0.2f1」にリネームします。
1. デスクトップに配置したエイリアス「Unity5.0.2f1」を実行し、Unityが正常に起動するか確認。

## Unity 5.1.0b6のインストール

1. ベータ版は[こちら](http://unity3d.com/unity/beta)よりダウンロードします。
1. ダウンロードしたdmgファイルを実行します。
1. 画面に従いインストールします。
1. アプリケーションフォルダ配下の「Unity」フォルダを「Unity5.1.0b6」にリネームします。
1. 「Unity5.1.0b6」フォルダ内の「Unity」アプリケーションのエイリアスを作成し、デスクトップにコピーする。
1. デスクトップにコピーしたエイリアスを「Unity5.1.0b6」にリネームします。
1. デスクトップに配置したエイリアス「Unity5.1.0b6」を実行し、Unityが正常に起動するか確認。

# JDKのアップデート

[Oracle Java SE Development Kit](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)のページよりJDKをダウンロードし、インストールする

# Android SDKのインストール

[Android Developers](http://developer.android.com/sdk/index.html)よりSDKをダウンロードする

# Xcodeのインストール

AppStoreよりXcodeをインストールする

# 開発証明書およびプロビジョニングファイルのインストール

※このあたりの詳細は別途記事を書きます

## まだ開発証明書を作成したことがない場合

1. 新規に証明書をApple Developer Centerに登録する
1. プロビジョニングファイルを作成し、開発マシンにインストールする

## すでに別のマシンで開発証明書を作成している場合

1. 開発証明書を作成したマシンでp12証明書ファイルを作成する
1. 作成したp12ファイルを持ってきてインストールする
1. プロビジョニングファイルをダウンロードし、開発マシンにインストールする

※プロビジョニングファイルがインストールされているかは下記のフォルダ配下のファイルを見ることで判断できます。

`/Users/[ユーザ名]/Library/MobileDevice/Provisioning Profiles`

プロビジョニングファイルの整理をしたい時は上記フォルダ内のファイルをすべて削除してから必要なプロビジョニングファイルを入れると良いです。

# Gitlabの設定

## 秘密鍵/公開鍵の作成

`/Users/[ユーザ名]/.ssh` にid_rsaおよびid_rsa.pubがない場合は下記のコマンドを実行します。

```
ssh-keygen -t rsa
```

## 公開鍵の登録

`/Users/[ユーザ名]/.ssh/id_rsa.pub` の内容をプロジェクトの「Settings」-「Deploy Keys」に登録します。

# ビルド用のワークスペースを作成する

私の場合はデスクトップにプロジェクト名のフォルダを作成し、下記のような構成にしています。

プロジェクト名が「sample」の場合

```
sample
　└android → androidビルド用のワークスペース
　└ios     → iOSビルド用のワークスペース
　└logs    → ビルドログ格納用
```

# Jenkinsにジョブを追加

## フォルダの作成

1. Jenkinsで「新規ジョブ作成」もしくは「新しいジョブ」をクリックします。
![jenkins_001.png](https://qiita-image-store.s3.amazonaws.com/0/43800/3a18d857-0c70-ca9e-84bd-a795a2fce4a8.png)

1. ジョブ名にはフォルダ名を入力し、「Folder」にチェックを入れ「OK」ボタンを押します。
![jenkins_002.png](https://qiita-image-store.s3.amazonaws.com/0/43800/619e1f4a-c787-5930-e4c2-fbb9a09af23e.png)

1. 表示用フォルダ名やフォルダの説明文章を入力することもできます。
![jenkins_003.png](https://qiita-image-store.s3.amazonaws.com/0/43800/abf4c0f8-8c68-7ece-08fe-b8126fa17108.png)

1. 表示用フォルダ名やフォルダの説明文章を入力した場合は下記のように表示されます。
![jenkins_004.png](https://qiita-image-store.s3.amazonaws.com/0/43800/1be48ed1-3e71-ddc2-b694-3179d0984588.png)

## ビルド用ジョブの作成

### androidのビルド用ジョブ作成

1. Jenkinsで「新規ジョブ作成」もしくは「新しいジョブ」をクリックします。

1. ジョブ名に「android_build」、「フリースタイル・プロジェクトのビルド」にチェックを入れ「OK」ボタンを押します。
![jenkins_005.png](https://qiita-image-store.s3.amazonaws.com/0/43800/72b7ac59-5fc6-2cbb-a0d2-37abc5d2554f.png)

1. 「ビルドのパラメータ化」にチェックを入れ、「パラメータの追加」より下記のように設定する。
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>branch_name</dd>
 <dt>デフォルト値</dt>
 <dd>develop</dd>
 <dt>説明</dt>
 <dd>ビルドするブランチ名を指定します。</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>target_path</dd>
 <dt>デフォルト値</dt>
 <dd>　</dd>
 <dt>説明</dt>
 <dd>AssetsフォルダとProjectSettingsフォルダがトップディレクトリ以外に存在する場合に指定してください
※先頭は/から開始してください。</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>bundle_id</dd>
 <dt>デフォルト値</dt>
 <dd>[デフォルトのバンドルIDを指定]</dd>
 <dt>説明</dt>
 <dd>バンドルIDを変更したい場合に指定してください</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>bundle_version</dd>
 <dt>デフォルト値</dt>
 <dd>　</dd>
 <dt>説明</dt>
 <dd>バンドルバージョンを変更したい場合に指定してください</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dt>
 <dt>名前</dt>
 <dd>bundle_version_code</dd>
 <dt>デフォルト値</dt>
 <dd>　</dd>
 <dt>説明</dt>
 <dd>バンドルバージョンコード(Android用)を変更したい場合に指定してください。</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>unity_version</dd>
 <dt>デフォルト値</dt>
 <dd>4.6.3</dd>
 <dt>説明</dt>
 <dd>ビルドするUnityのバージョンを変更したい場合に指定してください。</dd>
</dl>

1. 「プロジェクトの高度なオプション」の「高度な設定...」を押し、「カスタムワークスペースを使用」にチェックを入れ、「ディレクトリ」にワークスペースとするパスを記載する。
`/Users/[ユーザ名]/Desktop/sample/android`

1. 「ソースコード管理」の「Git」にチェックを入れ、「Repositories」の「Repository URL」にはgitリポジトリのURLを入力します。

1. 「Branches to build」の「Branch Specifier (blank for 'any')」には「$branch_name」を入力します。

1. 「ビルド」の「ビルド手順の追加」より「シェルの実行」を選択し、下記の内容を記載します。

```bash
#!/bin/bash
echo "##################################"
echo "# Build Parameter                #"
echo "##################################"
echo "branch_name        : ${branch_name}"
echo "target_path        : ${target_path}"
echo "bundle_id          : ${bundle_id}"
echo "bundle_version     : ${bundle_version}"
echo "bundle_version_code: ${bundle_version_code}"
echo "unity_version      : ${unity_version}"
echo "##################################"
echo "# Build apk file.                #"
echo "##################################"
```

8.「ビルド後の処理」より「Upload to HockeyApp」を選択し、下記のような設定をする。

![jenkins_006.png](https://qiita-image-store.s3.amazonaws.com/0/43800/0ccbd67a-7705-6d5f-dd0d-8ffb3cea5337.png)

「Release Notes」の箇所はバージョン管理のチェンジログから持ってくるのであれば「Use Change Log」を使用してください。

### iOS用のビルド用ジョブ作成

#### XcodeProjectファイルの作成

1.Jenkinsで「新規ジョブ作成」もしくは「新しいジョブ」をクリックします。

2.ジョブ名に「ios_build_xcodeproject」、「フリースタイル・プロジェクトのビルド」にチェックを入れ「OK」ボタンを押す。

3.「ビルドのパラメータ化」にチェックを入れ、「パラメータの追加」より下記のように設定する。
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>branch_name</dd>
 <dt>デフォルト値</dt>
 <dd>develop</dd>
 <dt>説明</dt>
 <dd>ビルドするブランチ名を指定します。</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>target_path</dd>
 <dt>デフォルト値</dt>
 <dd>　</dd>
 <dt>説明</dt>
 <dd>AssetsフォルダとProjectSettingsフォルダがトップディレクトリ以外に存在する場合に指定してください
※先頭は/から開始してください。</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>bundle_id</dd>
 <dt>デフォルト値</dt>
 <dd>[デフォルトのバンドルIDを指定]</dd>
 <dt>説明</dt>
 <dd>バンドルIDを変更したい場合に指定してください</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>bundle_version</dd>
 <dt>デフォルト値</dt>
 <dd>　</dd>
 <dt>説明</dt>
 <dd>バンドルバージョンを変更したい場合に指定してください</dd>
</dl>
***
<dl>
 <dt>タイプ</dt>
 <dd>テキスト</dd>
 <dt>名前</dt>
 <dd>unity_version</dd>
 <dt>デフォルト値</dt>
 <dd>4.6.3</dd>
 <dt>説明</dt>
 <dd>ビルドするUnityのバージョンを変更したい場合に指定してください。</dd>
</dl>

4.「プロジェクトの高度なオプション」の「高度な設定...」を押し、「カスタムワークスペースを使用」にチェックを入れ、「ディレクトリ」にワークスペースとするパスを記載する。
`/Users/[ユーザ名]/Desktop/sample/ios`

5.「ソースコード管理」の「Git」にチェックを入れ、「Repositories」の「Repository URL」にはgitリポジトリのURLを入力します。

6.「Branches to build」の「Branch Specifier (blank for 'any')」には「$branch_name」を入力します。

7.「ビルド」の「ビルド手順の追加」より「シェルの実行」を選択し、下記の内容を記載します。

```bash
#!/bin/bash
echo "##################################"
echo "# Build Parameter                #"
echo "##################################"
echo "branch_name        : ${branch_name}"
echo "target_path        : ${target_path}"
echo "bundle_id          : ${bundle_id}"
echo "bundle_version     : ${bundle_version}"
echo "unity_version      : ${unity_version}"
echo "##################################"
echo "# Build xcodeproject file.       #"
echo "##################################"
```

8.「ビルド後の処理」より「Trigger parameterized build on other projects」を選択し、下記のような設定をする。
<dl>
  <dt>Projects to build</dt>
  <dd>ios_build_ipa</dd>
  <dt>Add Parameters</dt>
  <dd>Current build parameters</dd>
</dl>

#### ipaファイルの作成

1.フリースタイルビルドの新規ジョブを作成し、ジョブ名を「ios_build_ipa」とする。

2.「プロジェクトの高度なオプション」の「高度な設定...」を押し、「カスタムワークスペースを使用」にチェックを入れ、「ディレクトリ」にワークスペースとするパスを記載する。
`/Users/[ユーザ名]/Desktop/sample/ios`

3.「ビルド」の「ビルド手順の追加」より「Xcode」を選択し、下記の通り設定する。

<dl>
  <dt>Target</dt>
  <dd>Unity-iPhone</dd>
  <dt>Clean before build</dt>
  <dd>☑️チェックを入れる</dd>
  <dt>Configuration</dt>
  <dd>Release</dd>
  <dt>Pack application and build ipa?</dt>
  <dd>☑️チェックを入れる</dd>
  <dt>.ipa filename pattern</dt>
  <dd>作成後のipaファイル名を指定(\${VERSION} と \${BUILD_DATE}を使用できます)</dd>
  <dt>Code Signing Identity</dt>
  <dd>署名</dd>
  <dt>Unlock Keychain?</dt>
  <dd>☑️チェックを入れる</dd>
  <dt>Keychain path</dt>
  <dd>$\{HOME}/Library/Keychains/login.keychain</dd>
  <dt>Keychain password</dt>
  <dd>キーチェーンにアクセスするためのパスワード</dd>
  <dt>Custom xcodebuild arguments</dt>
  <dd>CODE_SIGN_RESOURCE_RULES_PATH="$(SDKROOT)/ResourceRules.plist"</dd>
  <dt>Xcode Project Directory</dt>
  <dd>${WORKSPACE}/ios</dd>
  <dt>Xcode Project File</dt>
  <dd>Unity-iPhone.xcodeproj</dd>
  <dt>Build output directory</dt>
  <dd>${WORKSPACE}/ios/build</dd>
</dl> 

4.「ビルド後の処理」より「Upload to HockeyApp」を選択し、「androidのビルド用ジョブ作成」の8と同様の設定をする。

# Jenkinsからビルドの実施

android_buildのジョブを選択し、左側の「パラメータ付きビルド」より各種パラメータを設定して「ビルド」を押すとandroidとiOSのビルドおよびアップロードが自動で行われるようになります。