前情提要
這次要講的是如何在Unity 專案裡 ,使用 Game CI 提供的 Github Action 將建置專案自動化,細節微操很多,一不小心篇幅就拉得有點長。
但我還是把它放在 10 minutes Unity 專欄裡......
湯姆就是瑪莉
記得做大學專題時,每次輸出一版時間就耗在那裡,專案小還好說,大專案每次Build 半小時就過去了。
我們並不需要非常高效能的電腦去處理輸出,並且希望它能定期完成輸出動作給美術或企劃確認,這個時候 CI(Continuous Integration) 技術就相當重要。
因為是在 Github 上操作,請務必先學會版控技巧!
甚麼是CI / CD
工程師們通常都有一個共通點,就是講求效率,希望一些重複性的操作能夠自動化進行,於是便有了CI/CD 的誕生。
舉個例子,在我大學畢製遊戲時,並不是所有專案成員都熟悉Unity 的操作,但又需要確認目前進度或是錄製提報需要的影片,這時候就會來拜託身為主程式的我建置一版出來。
但非常可惜,那時候的我並沒有掌握這個技術
設定Github Workflows
在專案根目錄裡新增路徑 .github\workflows ,並新增三個檔案:
HelloWorld.yaml 、 Activation.yaml 、 Build.yaml
這時候你的資料夾結構會長這樣:
Project
├─ .github
│ └─ workflows
│ ├─ Activation.yaml
│ ├─ Build.yaml
│ └─ HelloWorld.yaml
├─ Assets
│ ├─ Scenes
.
.
.
YAML 是一種可讀性高的資料序列化格式
我們先用 HelloWorld.yaml 來簡單練習 Github Workflow 的格式。用腳本編輯器打開它並輸入以下內容:
完成之後將變更 Push 上去。
回到 Github 上點選 Actions ,應該會看到我們的My workflow ,點選 Run workflow 來試試看:
靜待一段時間後,My workflow 完成了,我們來看一下結果:
這樣你已經完成第一個 Workflow 了,我們可以進入 Game-CI 實戰了!
授權Unity
我們需要授權 Game-CI 容器上的 Unity。
打開 Activation.yaml 並寫入:
這個 Workflow 可以讓我們取得手動授權的 .alf 檔案。同樣到 Github 執行我們的 Acquire activation file :
執行成功後,Summary 滑到底,將 Artifacts 裡的授權檔下載:
到
Unity手動授權 網站上將我們的 .alf 檔上傳,選擇免費方案後下載授權成功的 .ulf 檔。
注意:如果是專業版的用戶,走的是另一個流程!
回到 Github ,因為授權碼不能隨便洩漏,我們需要設定 Github Secrets:
需要新增三組 Secret ,分別是 UNITY_EMAIL 、 UNITY_PASSWORD 、 UNITY_LICENSE :
UNITY_EMAIL - 註冊Unity ID 使用的信箱
UNITY_PASSWORD - Unity ID 帳戶密碼
UNITY_LICENSE - .ulf 檔裡的所有內容
新增完畢後就剩最後一步了,設定 Builder!
Game-CI Builder
打開 Build.yaml 並寫入以下內容:
Push 完後同樣回到 Github Actions ,選擇執行 Build 🥖😭🌭 ,靜待建置完成:
注意:Github Artifacts 是有容量上限的,免費版是 500MB
這個範例裡有設定 retention-days:2 讓 artifact 兩天清理一次
完全自動化
雖然已經不用在自己的電腦上 Build ,但總不可能每次需要才到 Github Action 上操作,違反了我們 CI 的初衷,所以我們可以這樣改寫 Build.yaml :
這邊使用到了 POSIX Cron 表達式,上面的範例指的是 每周一三五 (UTC)4:00
台灣是 UTC+8 ,所以是 中午 12 點
如此一來,真正的自動化建置就完成了~
總結
這次介紹了用 Game-CI 來建置,還有很多可以延伸細講的東西,包括如何將自己閒置的電腦當成 Runner 來跑建置、如何將結果輸出到 Discord 上等。最近也有在看同樣是 CI/CD 工具的 Jenkins ,等到學成歸來再看看能不能寫一篇。