게임 엔진/Unity

Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 2편

데브준우 2024. 3. 23. 02:43
 
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편

https://dev-junwoo.tistory.com/148

 

Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편

이번에는 유니티 빌드를 깃허브 액션으로 쉽게 자동화 하는 작업을 해보았다. 깃허브 액션 -> 자동빌드 -> 빌드 파일 Nas 업로드 -> Slack에 Nas로 업로드의 과정을 거친다. CI/CD CI(Continuous Integration) -

dev-junwoo.tistory.com

 

 


Github Action으로 유니티 빌드하기

마켓 플레이스

https://github.com/marketplace?type=actions

 

GitHub Marketplace: actions to improve your workflow

Find the actions that help your team build better, together.

github.com

 

깃허브 액션에도 마켓 플레이스가 있다.

하나하나 다 만들 필요없이, 남들이 만들어둔 좋은 액션들을 가져다가 쓰면 된다.

 

 

유니티로 검색해보면 많은 액션들이 뜨는데, 가장 유명한 game-ci의 Unity - Builder를 사용해보자.


Github Secrets

https://game.ci/docs/github/builder

 

Builder | GameCI

Building the project as part of a workflow may help to create mind-space and focus on the project

game.ci

 

 

game-ci의 도큐먼트를 살펴보면 빌드하는데 라이센스,유니티 아이디,패스워드가 필요하다.

하지만 이런 중요한 정보를 코드안에 그냥 적어둘수가 없으니, 깃허브에서 지원하는 Secrets를 사용하면 된다.

 

 

레포지토리의 Settings - Secrets and variables에서 Actions로 들어가서

변수안에 값을 넣듯이 미리 만들어두고 사용만 하면된다.

 

암호화되어 저장되고, Actions 실행중에만 복호화되어 사용된다고 한다.

그리고 수정버튼을 눌러서 들어가도 전에 저장해놓은 값을 볼 수 없다.

 

유니티 이메일과 패스워드는 쓰시는 유니티 계정을 넣어주면 되고, 라이센스가 문제인데

 

 

해당 폴더로 들어가면 ulf 파일이 있다.

메모장이나 아무 편집기로 열어서 그대로 복붙하면 끝이다.

 


 

유니티 빌드 워크 플로우 만들기

 

name: UnityBuildTest

on:
  workflow_dispatch:

permissions: write-all
  
jobs:
  #Job 설정
  buildForAndroid: 
    name: Build Android🛸🛸🛸
    runs-on: ubuntu-latest
    steps:

      # Step1 - Check Out
      - name: Check Out
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          lfs: true

      # Step2 - Cache Library
      - name: Cache Library
        uses: actions/cache@v4.0.2
        with: 
          path: Library
          key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-

      # Step3 - Unity Build
      - name: Unity Build
        uses: game-ci/unity-builder@v4
        env:
          UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
          UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
          UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}
        with:
          targetPlatform: Android
      
      # Step4 - Upload Build File
      - name: Upload Build File
      - uses: actions/upload-artifact@v3
        with:
          name: Build-Android
          path: build

 


Step 의 run 과 uses

Step안에서는 run과 uses를 사용할 수 있는데, 차이점은 아래와 같다. (1편에서 예제는 run을 썼다.)

run : 쉘 커맨드 실행
uses : 마켓플레이스에 있는 액션 사용

 

 

나는 game-ci의 예제를 보고 이런식으로 만들어 주었다.

 

단계 1 : 체크아웃

 -레포지토리의 파일 가져오기


단계 2: 라이브러리 폴더 캐싱 

 - 큰 Library 폴더를 미리 캐싱해두고 빌드를 하기때문에 빌드 속도를 단축시킬 수 있다.

 - 키를 Library 접두사와 함께 Assets,Packages,ProjectSettings 디렉토리 내의 파일들에 대한 해시값을 기반으로 생성된다고 한다.

- 파일들의 내용이 변경될때마다 새로운 해시값이 생성돼서, 변경사항이 있을때만 새로운 캐시를 생성한다.

 

단계 3: 유니티 빌드

 - 안드로이드를 타겟으로 빌드를 해주었다.

 - 병렬적으로 다른 타겟의 빌드도 함께 돌릴 수 도 있다.

 - https://game.ci/docs/github/getting-started#workflow-examples 

 

Getting started | GameCI

GitHub Actions for Unity provide the fastest and

game.ci

 

단계 4: 빌드 파일 업로드

 - 빌드파일을 깃허브 액션 서버에 저장한다.

 


빌드 확인

 

 

Actions에 들어가서 확인을 해보니 빌드가 성공했다.

21분이 걸려서 빌드를 완료 했다.

 

그리고 하단에 Build - Android 라는 빌드 파일이 생성 되었다.

누르면 다운이 가능하다.


추가: 안드로이드 빌드에서의 디스크 부족

 

한번 더 빌드를 하니 오류가 떴다.

도커에 새로운 레이어를 등록할때 디스크 공간이 부족하다는 에러인데, 

game-ci의 Common issues에도 올라온 문제였다.

https://game.ci/docs/troubleshooting/common-issues#no-space-left-on-device

 

다행스럽게도 깃허브 Issues에 누가 올린 질문에 댓글을 해놓은게 있어서 이 글을 참고해서 해결법을 찾았다.

https://github.com/game-ci/unity-builder/issues/191

 

no space left on device · Issue #191 · game-ci/unity-builder

Run webbertakken/unity-builder@v2.0-aplha-5 with: projectPath: cs2019/cs2019_pc unityVersion: 2020.2.1f1 targetPlatform: Android allowDirtyBuild: true kubeContainerMemory: 800M kubeContainerCPU: 0....

github.com

 

 

# Free up disk space
    - name: Free Disk Space for Android
      run: |
        sudo swapoff -a
        sudo rm -f /swapfile
        sudo apt clean
        docker rmi $(docker images -q)
        df -h

 

위의 코드를 캐싱과 유니티 빌드 스텝 사이에 추가 해주었다.

 

 

2번 연속 빌드가 잘 진행되었고, 첫번재 빌드는 22분, 두번째 빌드는 10분가량으로 시간이 반으로 줄어들은것을 확인했다.


 

3편에서는 마지막으로 Nas에 업로드하고 Slack으로 알림을 던지는 작업을 진행해보겠다.

 

Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 3편

https://dev-junwoo.tistory.com/150

 

Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 3편

[1편] https://dev-junwoo.tistory.com/148 Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 2편 Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 1편 https://dev-junwoo.tistory.com/148 Github Action으로 Unity 자동 빌

dev-junwoo.tistory.com