유니티 자동화 빌드 (Git Action)

3

Git

목록 보기
2/2
post-thumbnail
post-custom-banner

소개

유니티에서 빌드를 하게 되면 빌드 시간 동안 팀 프로젝트를 할 수 없게 되어버립니다.

빌드 시간이 짧으면 큰 타격은 없는데, 빌드 시간이 길어지면 작업을 할 수 없으니 치명적이죠.

자동화 빌드 시스템을 구축하면 외부환경에서 빌드를 할 수 있어서 빌드에 의한 작업 흐름 끊김을 방지할 수 있습니다.

이번 문서에서는 Github에서 제공하는 Action이라는 기능을 사용하여 자동화 빌드 시스템을 구축해볼 것입니다. 😎

타깃층 (필독)

이 문서의 타깃층은 제작 중인 프로젝트 리소스가 외부에 공개되어도 괜찮은 경우에 적합하며,

비공개 프로젝트의 경우 비권장합니다.

가격

리포지토리가 Public이라면 무료입니다 (와!! 대박..! 👀)

💡 Private 리포지토리는 금액을 요구합니다. 가격 안내 보기

프로젝트를 제작하다 보면 유료 에셋은 사용하는 경우가 많습니다.
예를 들면, Amplify Shader Editor(비주얼 셰이더 저작 도구)같은? 🤔

Public으로 리포지토리를 관리할 예정이라면 이러한 에셋은 Git Ignore를 통해 리포지토리 업로드되지 않도록 하며, 팀 내부에서만 열람 가능한 구글 드라이브에 에셋을 업로드하여 관리하도록 환경을 구성합니다. 🙂

Game CI

GameCIGithub Action과 함께 사용하여 게임 데이터를 자동 분석하고 빌드를 지원하며,
게임 개발 및 운영 효율성을 높일 수 있는 플랫폼
입니다.

GameCI의 특징은 다음과 같습니다.

  • 자동화된 빌드: Github Action과 함께 GameCI를 사용하여 Unity 프로젝트를 자동으로 빌드할 수 있습니다.
  • 다양한 플랫폼 지원: GameCI는 Windows, macOS, Linux, Android, iOS 등 다양한 플랫폼에 대한 Unity 프로젝트 빌드를 지원합니다.
  • 빌드 결과 분석: GameCI는 빌드 결과를 분석하여 빌드 오류나 성능 문제를 파악하는 데 도움을 줍니다.

주의

Game CI는 Unity 빌드를 위해 제작되었으며 언리얼은 다른 CI를 사용해야합니다.
사용하는 유니티 버전은 너무 최신 버전을 사용할 경우 ProjectVersion.txt를 찾지 못했다 라는 에러를 발생시킨다는 점을 주의해야합니다. (LTS사용 권장)

시작하기 전에

Unity 프로젝트를 Git 리포지토리에 Public으로 업로드하여 준비합니다.

시작해요


Secrets 등록하기

Game CI를 통해 Unity를 빌드하려면 유니티 라이선스 정보가 요구됩니다.
라이선스 정보 및 Unity ID와 PW정보는 매우 민감한 정보이기 때문에 Github에 Secrets 기능을 사용하여 정보를 전달할 것입니다.

이 자료는 Game CI의 Activation의 내용을 참고하였으며, Unity Persnal 라이선스 기준으로 설명합니다.

💡 Persnal 라이선스가 아닌 경우 추가적인 작업이 요구될 수 있음을 알립니다.

Settings > Secrets and Variables > Actions 으로 이동합니다.

New repository를 클릭하여 다음과 같이 3개의 내용을 추가합니다 :

UNITY_LICENSE - (라이선스 파일의 내용을 여기에 복사합니다.)

UNITY_EMAIL - (Unity 로그인에 사용한 이메일 주소 추가)

UNITY_PASSWORD - (Unity에 로그인할 때 사용하는 암호 추가)

라이선스 파일은 다음 경로에서 확인할 수 있으며, ulf파일의 내용을 Secret에 작성합니다.

  • Windows: C:\ProgramData\Unity\Unity_lic.ulf
  • Mac: /Library/Application Support/Unity/Unity_lic.ulf
  • 리눅스: ~/.local/share/unity3d/Unity/Unity_lic.ulf

최종적으로 3개의 Secrets 환경을 구성하여 완료합니다.

빌더 구성하기

리포지토리에서 Action을 선택하고 set up a workflow yourself를 클릭합니다.

main.yml이라는 파일을 생성할 것이며, 다음과 같이 내용을 작성하고 Commit & Push합니다.

  • 다음 내용은 GameCI의 샘플 코드를 참고하였음을 알립니다.

name: Automated Build ⭐

on:
  push: # Master 브랜치에 Push가 되면 빌드가 되도록 동작시킵니다.
    branches: [ main ]
    
jobs:
  buildWindows:
    name: 💻 Windows-64 Bit
    runs-on: windows-latest # 윈도우를 사용합니다.
    
    steps:
      # Checkout
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          lfs: true

      # Cache (캐시파일을 생성하여 다음 빌드시 더 빠르게 빌드를 할 수 있도록 해줍니다.)
      - uses: actions/cache@v4
        with:
          path: Library
          key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-

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

      # Output
      - uses: actions/upload-artifact@v4
        with:
          name: Windows Build
          path: build

👉 마무리

매번 Push가 올라올 때마다 빌드가 되는 것을 볼 수 있습니다.

빌드된 파일을 클릭하여 다운로드를 할 수 있습니다.

추가 (Mac OS 빌드)

Mac OS 빌드를 원할 경우 다음과 같이 작성합니다.

name: Automated Build ⭐

on:
  push: # Master 브랜치에 Push가 되면 빌드가 되도록 동작시킵니다.
    branches: [ main ]
    
jobs:
  buildWindows:
    name: 💻 Windows-64 Bit
    runs-on: windows-latest # 윈도우를 사용합니다.
    
    steps:
      # Checkout
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          lfs: true

      # Cache (캐시파일을 생성하여 다음 빌드시 더 빠르게 빌드를 할 수 있도록 해줍니다.)
      - uses: actions/cache@v4
        with:
          path: Library
          key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-

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

      # Output
      - uses: actions/upload-artifact@v4
        with:
          name: Windows Build
          path: build
 
  buildMacOS:
    name: 💻 MacOS
    runs-on: macos-latest # MacOS를 사용합니다.
    
    steps:
      # Checkout
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          lfs: true

      # Cache (캐시파일을 생성하여 다음 빌드시 더 빠르게 빌드를 할 수 있도록 해줍니다.)
      - uses: actions/cache@v4
        with:
          path: Library
          key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-

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

      # Output
      - uses: actions/upload-artifact@v4
        with:
          name: MacOS Build
          path: build

예제

https://github.com/NK-Studio/Unity-Auto-Build-Sample

후원

이 내용이 맛있었다면 저에게 맛있는 커피를 후원해주세요! ☕

토스 익명 송금 : 후원하기
계좌 송금 : 토스뱅크 1000-0586-4766 (김한용)

참고

https://note4iffydog.tistory.com/55

https://qiita.com/mkc1370/items/a976880531d5d3f121b0

https://zenn.dev/nikaera/articles/unity-gameci-github-actions

profile
유니티를 통한 스페셜 테크닉만 다루는 독특한 개발자
post-custom-banner

0개의 댓글