【M1 BigSur】JenkinsからGit(LFS)のチェックアウトからUnityへのビルドまで(Github)

# 概要

Mac Book Air (M1 2020)
macOS Big Sur 11.2.2

[【M1 BigSur】Jenkins導入編](https://qiita.com/im0039kp/items/2dec89d805c4383de2e0)
こちらで書かせたいただいた記事の続きです。
この記事を残しておきたかったのでついでにJenkins導入を書いた次第です。
JenkinsからGitでチェックアウトができればいいので別にUnityでなくてもいいですが今回は確認のために利用しています。

一連の流れを記事にしましたが割と困るのが
BigSurでの`git-lfs filter-process: git-lfs: command not found`エラーの回避方法だと思います。

追記
git lfsのエラー`error: external filter 'git-lfs filter-process' failed`の追記しました。(2021/03/25)
git-lfs filter-process: git-lfs: command not foundのエラーの回避方法の別パターンの提案（未検証）(2022/03/03)

# 準備

### Github

Githubで作成したリポジトリーを使っているのでアカウントは作成しておきましょう。

### unityのインストール

・とりあえずUnityはインストールしておいてください。
　今回は`Unity2020.3.0f1`で試しています。

### GitのSSHキー(作っていない場合)

```:
$ ssh-keygen
```
いろいろ聞かれるみたいですがすべて空白ままエンターして続けました。

生成場所は
`Users/[ユーザー名]/.ssh/`
に作られるのでこちらを使用してGithubからSSHを登録します。

|<img width="900" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/bba380e7-358d-c6e3-5afd-c212bc3ec368.png">|
|:--|

Githubのアカウントから`Settings>SSH and GPC keys`を選択して`New SSH Key`を選択する。


|<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/b524f2dd-5089-757b-beba-44854229c871.png">|
|:--|

|設定|内容|
|:-:|:-:|
|Title|これは好きに入力してください。|
|Key|ここは先ほど作成した`Users/[ユーザー名]/.ssh/id_rsa.pub`の中をコピーして貼り付けてください。|

このように作られます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/1d20bc0c-5ccb-4d9a-353d-ebb7adeac21a.png)
|:--|


# JenkinsのUnityプラグインを導入

|<img width="500" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/1346d0a7-b0d9-6d58-e0a6-061dd6567a64.png">|
|:--|

|<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/e42d3d2c-7aa4-6d00-391f-7f67918be8b5.png">
|:--|

インストール後に再起動してもらうために`Download now and install after restart`を選択しました。

|<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/e7447111-a79d-d0d3-8800-1fd81135a4ea.png">
|:--|

インストールできました。

|<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/9e2fecff-efc9-45b7-7373-3301b1640ead.png">
|:--|

|<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/d5dca3a7-7e71-9a18-ce9d-09a35403e9da.png">
|:--|

設定したら保存しましょう。

インストールディレクトリにはjenkinsをインストールしたUnityのパスを設定しますが
FinderでUnityからoptionを押しながらするとパスをコピーできます。

|<img width="500" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/3975b9d7-b6d4-2b70-9d30-93f00e4b4269.png">
|:--|

# ジョブを作成

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/5a2ca99a-22b6-6177-a28e-02c0f6dc079e.png)
|:--|

最初なので

|<img width="600" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/1643c4db-1b88-c1ff-a6f4-fe1314c2450d.png">
|:--|

ジョブ名：`unity_test`お好きな名前
`フリースタイル・プロジェクトのビルド`
で作成します。

|<img width="700" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/12b90681-1739-c280-8f40-d43f51ec0708.png">
|:--|

認証情報を追加します。


|<img width="700" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/7903792b-50a1-316f-4d64-affdcf11f8fd.png">
|:--|

追加した認証情報を選択して保存します。

|<img width="700" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/5207fe22-2a23-0326-960a-68a0aff376a3.png">
|:--|

これでプロジェクトの設定はできました。


# Unityのビルドをしてみる

リポジトリーの準備ができたのでunityに対してビルドしてみます。

適当にビルドするものを用意して試してみました。

<details><summary>BuildTest.cs(ビルドの確認)</summary><div>

```BuildTest.cs
using UnityEngine;

namespace Build
{
    /// <summary>
    /// ビルドのサンプル
    /// </summary>
    public class BuildTest
    {
        public static void HelloWorld()
        {
            Debug.Log("Hello World!");
        }
    }
}

```

</div></details>

`Invoke Unity3d Editor`を選択して

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/36321345-f6e7-a6db-1535-4caafda61df4.png)
|:--|

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/ecfb1da9-0ab2-c254-61ae-f858d7b649e7.png)
|:--|

ビルドの確認のために作ったビルドをjenkinsから呼び出してみます。

```
-quit -batchmode -projectPath /Users/[ユーザー名]/.jenkins/workspace/[githubのプロジェクトパス] -executeMethod Build.BuildTest.HelloWorld
```

`/Users/[ユーザー名]/.jenkins/workspace/[githubのプロジェクトパス]`

を設定して`ビルド実行`してみましょう。

# ビルド時のエラー

### git-lfs filter-process: git-lfs: command not found

GitLFSをインストールしているか確認してなければインストール

```:ターミナル：-zsh
% git lfs version
```

```:インストールなし
git: 'lfs' is not a git command. See 'git --help'.
```

```:インストールあり
git-lfs/2.13.2 (GitHub; darwin amd64; go 1.15.6)
```

git-lfsをインストール

```:ターミナル：-zsh
% brew install git-lfs
```

追記(2022/03/03)
自分はすでにマウントの設定をして回避しているので未検証ですがjenkins>システム設定>グローバルプロパティの環境変数に
キー
`PATH`
値
`$PATH:/usr/local/bin`

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/53416009-0452-873e-7192-761c111f81bb.png)
|:--|

こちらを行うだけでlfsの設定を回避できるかもしれないので、一度試してみてもよいかもしれないです。（マウントは面倒なので）グローバルプロパティの設定をしてもダメな場合は素直に下記のマウントを行いましょう。

BigSurではCatalinaと違って読み取り専用な`/usr/bin/`などを一時的に無効にしてシンボリックリンクを作成できないみたいなので、[Appleの公式](https://qapicks.com/question/395508-c65874dfec0b)の書かれている書き込み可能なマウントパスに設定してgit-lfsのシンボリックリンクを作成します。

・FileVaultを無効にする
<img width="600" alt="FileVault.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/33faca06-463e-a188-00df-15af6123a4d2.png">

・リカバリモードで再起動して実行します（M1の場合は電源ボタンを長押ししてリカバリーモードに入ります。）

セキュリティの確認をします。

```:ターミナル：-zsh
% csrutil status
```

```:
System Integrity Protection status: enabled.
```

enabledの場合は無効に

```:ターミナル：-zsh
% csrutil disable
```

```:ターミナル：-zsh
% csrutil authenticated-root disable
```

MacOSに再起動します。

ここからgit-lfsのシンボリックリンクを作成するためにマウントフォルダーを作成してディスクをマウントします。

```:ターミナル：-zsh
% mkdir ~/mount
```

```:ターミナル：-zsh
% sudo mount -o nobrowse -t apfs /dev/[デバイス] ~/mount
```
`[デバイス]`はディスクユーティリティの値を見ます。

>あなたのルートを検索-あなたのルートは/dev/disk1s2s3であればmount実行し、最後のを切り落とす、例えば、あなたは/dev/disk1s2をマウントします

[Appleの公式](https://qapicks.com/question/395508-c65874dfec0b)に書かれているの通りに`disk3s1s1`の場合は`disk3s1`でマウントします。

<img width="800" alt="diskdeveice.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/f3cdda0e-cc9a-1763-1925-02495463eb8e.png">

```:ターミナル：-zsh
% sudo ln -s /usr/local/bin/git-lfs ~/mount/usr/bin/
```

```:ターミナル：-zsh
% sudo bless --folder ~/mount/System/Library/CoreServices --bootefi --create-snapshot
```

そのまま再起動

```:ターミナル：-zsh
% sudo reboot
```

### error: external filter 'git-lfs filter-process' failed

こちらのエラーはジョブの設定から

|<img width="300" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/e3ded3d7-54ec-8bdf-e0ad-0fc386e8526d.png">
|:--|

ソースコードの管理で追加の`Git LFS pull after checkout`を選択をしてください。

|<img width="400" alt="unitypath.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175167/9406e9b4-75ed-3c25-50fd-723fd8512f40.png">
|:--|

# 参考リンク

[【Jenkins】GitのSSH接続をするための認証情報を設定する【GitHub】](https://qiita.com/nkjzm/items/865f71efbf494ed57006)
[JenkinsでUnityプロジェクトをビルドする](https://qiita.com/broken55/items/9220e86460e320ffefbf)
[Unityコマンドライン引数](https://docs.unity3d.com/ja/2018.4/Manual/CommandLineArguments.html)
[「macOS Big Sur 」でgit-lfs filter-process: git-lfs: command not foundに対応する](https://builtfunc.com/news/2220/)