GameCIを使ってUnityのCI/CD環境をGitHubActions上に構築する

はじめに

昔にGameCIを使ってGitHub Actions上でUnityのテストやビルドの自動化をする記事を書きました。しかし、UnityのLicense認証周りが変わったことで以下では動かなくなっていたため変更部分を書いておきます

ayousanz.hatenadiary.jp

Demo

以下が検証用のリポジトリです。各種詳細は以下をご覧ください。

github.com

環境

  • Unity 2023.2.4f1(Personal)
  • GitHub Actions
  • GameCI

ライセンス認証

ライセンス、GameCIの Activation ページに沿って進めていきます。

1 . ローカルマシンにUnity Hubをインストールします。

2 . CI で使用している Unity アカウントで Unity Hub にログインします。

3 . 個人ライセンスをアクティベートします。ライセンスが表示されない場合は、Unity Hub > Preferences > Licenses > Add と進み、Get a free personal license を選択します。

4 . 使用しているホストに応じて、Unityライセンスである.ulfファイルを以下のパスで見つけます。

WindowsWindows: CProgramData¥Unity¥Unity_lic.ulf
MacMac: /Library/Application Support/Unity/Unity_lic.ulf
Linux: ~/.local/share/unity3d/Unity/Unity_lic.ulf

5 . Github > <あなたのリポジトリ> > Settings > Secrets and Variables > Actionsを開きます。

以下のシークレットを追加します

  • UNITY_LICENSE - (ここにライセンスファイルの内容をコピーします)
  • UNITY_EMAIL - (Unityにログインするために使用するメールアドレスを追加します)
  • UNITY_PASSWORD - (Unityにログインする際に使用するパスワードを追加)

6 . シートの1つを使用していないことを確認するために使用したローカルマシンのUnity Hubで個人ライセンスを返します。これを行うには、Unity Hub > Preferences > Licensesに移動し、ウィンドウにリストされているPersonal licenseでReturn licenseを選択します。

ビルドの自動化

ビルドは以下の ymlファイルを使って自動化することができます。

ファイルは、.github/workflows/build.yml のパスに作成します

name: Build

env:
  UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}

# Controls when the action will run. 
on: 
  workflow_dispatch: {}
  push:
    branches:
      - main
    paths-ignore:
      - '.github/**'
  # Triggers the workflow on push or pull request events but only for the main branch

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        projectPath:
          - .
        unityVersion:
          - 2023.2.4f1
        targetPlatform:
         - WebGL
    steps:
    - name: Checkout
      uses: actions/checkout@v4.1.1
      with:
        lfs: true
        clean: false
        
#     Cache
    - uses: actions/cache@v3.3.2
      with:
        path: Library
        key: Library

    # Build
    - name: Build project
      uses: game-ci/unity-builder@v4.1.3
      env:
        UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
        UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
        UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
      with:
        unityVersion: ${{ matrix.unityVersion }}
        targetPlatform: ${{ matrix.targetPlatform }}

    # Output
    - uses: actions/upload-artifact@v4.0.0
      with:
        name: Build-${{ matrix.targetPlatform }}
        path: build/${{ matrix.targetPlatform }}

テストの自動化

以下が Unity Test Runnerを使ったテストを自動実行する設定ファイルの例です

name: Test

# Controls when the action will run. 
on:
  pull_request:
    branches:
      - main
    types: [opened, synchronize, reopened]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  test:
    name: Run EditMode and PlayMode Test
    runs-on: ubuntu-latest
    steps:
      - name: Check out my unity project.
        uses: actions/checkout@v4.1.1
      - name: Run EditMode and PlayMode Test
        uses: game-ci/unity-test-runner@v4.1.1
        env:
          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
          UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
        with:
          projectPath: .
          githubToken: ${{ secrets.GITHUB_TOKEN }}
          unityVersion: 2023.2.4f1
      # テストの実行結果をアーティファクトにアップロードして後から参照可能にする
      - uses: actions/upload-artifact@v4.0.0
        if: always()
        with:
          name: Test results
          path: artifacts