Open7
【GitHub Actions】Macでself-hosted runnerとしてUnityプロジェクトをビルドする
概要
- GitHub Actionで、物理マシンのMac上でUnityのビルドを走らせる
まずローカルのコマンドでUnityビルドを行う
- ビルドスクリプトは、参考にはったURLをご確認
- ターミナルでコマンドを実行
/Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile ~/Projects/UnitySamples/CICDBuildSample/Logs/Build/build.log -projectPath ~/Projects/UnitySamples/CICDBuildSample -executeMethod MacBuild.BuildReleaseMac -nographics
- できてた!
参考
GitHub Actionsの設定
Runnerへの登録作業
- Settings > Actions > Runnersから登録
その後表示されたコマンドの、DownloadとConfigureを入力し設定完了!
~/actions-runner
$ ./run.sh
√ Connected to GitHub
Current runner version: '2.306.0'
2023-07-23 02:23:59Z: Listening for Jobs
- 登録されている
- なお、ローカルのターミナルでプロセスを終了すると、GitHubで確認できるstatusがIdleからOfflineになる模様
- あとで参考になりそうなもの
https://docs.github.com/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service?platform=mac
参考
簡単なJob実行
- 簡単なJobを設定して、実行してみる
- pushではなく、ボタンをトリガーとする
- (nameのBuild for Macは全くの嘘になったw)
name: Build for Mac
on: workflow_dispatch
jobs:
Build:
runs-on: self-hosted
steps:
- run: echo "Hello World"
runs-onの設定について
- なお、
runs-on: Dara-MacBook-Pro
としたところJobは実行されなかった。runs-onで指定するのはRunner自体の名前ではなく、labelを指定する必要がある模様。 - 試しに、Dara-MacBook-ProのRunnerに、
dara-macbook-pro
のラベルをつけ、ymlでruns-on: dara-macbook-pro
としたところ、実行された
参考
- ボタンをトリガーとしてActionを走らせる方法について(worlflow_dispatch)
https://docs.github.com/ja/actions/using-workflows/manually-running-a-workflow
GitHub Actionにおけるcheckoutの挙動調査
- ローカル・リモートのブランチの状況がどのように反映されるのかを検証する
- 追記: このセクションの、リモートのブランチがpullされていないように見える現象は、runコマンドが間違っていることが原因
スクリプトはこちら
name: Build for Mac
on: workflow_dispatch
jobs:
Build:
runs-on: dara-macbook-pro
steps:
- name: Checkout
uses: actions/checkout@v3
with:
clean: false
- name: Build
run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile ~/Projects/UnitySamples/CICDBuildSample/Logs/Build/build.log -projectPath ~/Projects/UnitySamples/CICDBuildSample -executeMethod MacBuild.BuildReleaseMac -nographics
実験
- mainとchangedというブランチを2つ作成し、changedに変更を加える。ビルドを起動すると、mainなのかchangedなのか分かるようにする
番号 | ローカルブランチ | リモートの状況 | ビルド指示 | ビルド結果 |
---|---|---|---|---|
① | changed | changedはpush済みで、mainへ未マージ | ローカルUnityEditor | changed(当たり前) |
② | changed | 〃 | GitHub Action / use workflow from "main" | changed |
③ | main | 〃 | 〃 | main |
④ | changed | 〃 | GitHub Action / use workflow from "changed" | changed |
⑤ | main | 〃 | GitHub Action / use workflow from "changed" | main |
⑥ | main | changedブランチをmainへマージ | GitHub Actions / use workflow from "main" | main(変更前) |
- ②の実行画面の画像
上記実験から分かること
- ②と③の比較: (リモートとローカルのブランチ状況に差がない前提で)ローカルブランチの変更が反映される
- ⑥について: pullの設定がうまくできていないのでは?
- 実験結果から分かることではないが、use workflow fromの設定は、安定したらmain固定でよさそう
workflowのコマンドを見直して、リモートの変更が反映されるようになった
- 上記のでは、runコマンドで指定しているプロジェクトが、action-runnerの下ではなく、~/Projectsという全く関係ない場所を指していた。
- action-runnerによって管轄されているプロジェクトを参照するように変更した(そもそもaction-runnerによって、~/Projects配下とは別の場所にもう一つUnityProjectができているということを知らなかった)
build.yml
- name: Build
run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile -projectPath . -executeMethod MacBuild.BuildReleaseMac -nographics -logFile
- ~/Projects配下のUnityProjectのmainブランチが古い状態 & リモートのmainブランチが新しい状態で、GitHub Actions経由でビルド
- 結果: ~/action-runner配下のプロジェクト内にビルドが出力され、最新mainになっていた(このときも~/Projects配下のUnityプロジェクトのmainブランチは古いまま)
- 完全に独立して動いていることが分かる
同じワークフローで、複数のプラットフォーム向けのビルドを作成する
- workflow_dispatchを押したら、Windows/Mac等の複数のビルドを走らせる
- その際、Switch Platformを用いずに、プラットフォームごとにプロジェクトを作成する
- 理由: プラットフォームを切り替える際にコンパイルなどが走る。「コンパイル処理が終了するのを待つ」などをやるとビルドが不安定になりやすい。
実装
build.yml
name: Build All Platform
on: workflow_dispatch
jobs:
Build:
runs-on: dara-macbook-pro
steps:
- name: Checkout-Windows
uses: actions/checkout@v3
with:
clean: false
path: PlatformWindows
- name: Checkout-Mac
uses: actions/checkout@v3
with:
clean: false
path: PlatformMac
- name: BuildWindows
run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile -projectPath ./PlatformWindows -executeMethod Build.BuildReleaseWindows -nographics -logFile
- name: BuildMac
run: /Applications/Unity/Hub/Editor/2021.3.7f1/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile -projectPath ./PlatformMac -executeMethod Build.BuildReleaseMac -nographics -logFile
結果
- ターゲットプラットフォームごとのUnityプロジェクトが作成される
- 最初の1回は、プラットフォームが指定のものになっていないことがある。その場合、手動でUnityプロジェクトを起動し、プラットフォームを切り替えてから終了する。
- 最初の1回は、プラットフォームが指定のものになっていないことがある。その場合、手動でUnityプロジェクトを起動し、プラットフォームを切り替えてから終了する。