Github Action 으로 CI

박지예·2026년 9월 27일

공부2026

목록 보기
19/20

처음 접한 개념 및 CI 구현하면서 배운 부분 학습 정리용.

Github Action 용어

  • 워크플로 : .github/workflows/*.yml 파일 하나. "언제 무엇을 할지"의 단위
  • 트리거(on) : 언제 도는지, push, pull_request, workflow_dispatch(버튼으로 수동 실행)
  • 잡(job) : 가상머신 한 대를 빌려 도는 단위. 잡끼리는 병렬이고 파일을 공유하지 않는다.
  • 스탭(step) : 잡 안에서 순서대로 실행되는 명령 하나.
    • uses: 남이 만든 액션을 가져다 쓰는 것,
    • run: 셀 명령을 직접 쓰는 것
  • 러너 : GitHub가 빌려주는 가상머신.

도커 이미지

프로그램과 그 프로그램이 돌아가는데 필요한 환경(OS 파일, 라이브러리, 설정) 등을 통째로 묶어 놓은 스냅샷 파일.
이 스냅샷을 실행하면 그 안의 환경이 그대로 살아나는데, 실행 중인 것을 컨테이너라고 부른다.

github 가 빌려주는 러너에는 유니티가 없다. 매번 유니티 설치 프로그램을 받아 깔면 20분이 넘는다.
GameCI(유니티용 CI 도구를 만드는 오픈소스)가 "우분투 + 유니티 6000.3.16f 에디터 + 실행에 필요한 라이브러리"를 미리 설치해서 이미지로 구워 Docker Hub 에 올려뒀다. 러너는 이 파일을 내려 받아 컨테이너로 띄우기만 하면 된다.

라이센스 활성화

깃허브 시크릿으로 mail 이랑 password를 secret key로 만들었다.
워크플로에서 ${{ secrets.이름 }}으로 읽는다.
CI 러너는 매번 새 머신이라 앞서 말한 key를 가지고 실행마다 활성화 한다.

유니티 테스트 두 종류와 asmdef

  • EditMode: 에디터 안에서 순수 C# 로직을 테스트. 씬을 안 띄워 빠르다
  • PlayMode: 씬을 실제로 재생. 느리고 UI나 연출 연동용

asmdef (어셈블리 정의)

코드를 별도 어셈블리로 묶는 파일. 테스트를 별도 asmdef에 둬야 테스트 러너가 인식하고 실제 빌드에는 안 들어간다. 테스트 어셈블리가 게임 코드 어셈블리를 참조하는 구조.

.gitattributes

.gitignore는 "무엇을 추적 안 할지", .gitattributes는 "추적하는 파일을 어떻게 저장하고 비교할지"

이번 작업에서 줄바꿈 정규화 기능으로 사용했다.
Windows는 CRLF, Mac과 Linux는 LF로 저장한다.
여기서 text=auto로 저장소 안에서 LF로 통일시키고, .cs text eol=lf로 체크아웃 때도 LF로 고정시켰다.

라이선스 방식

(personal 방식)

GameCI CLI 를 러너에 설치하여 game-ci test --docker 로 실행한다.
CLI 가 ProjectVersion.txt에서 이미지 태그를 자동으로 고르고,
컨테이너 안에서 활성화, 테스트, 반납을 한 번에 한다ㅣ.
잡이 실패하거나 취소돼도 반납되게 스크립트에 EXIT 트랩이 걸려있다. .ulf 파일은 필요 없다.

GameCI CLI 실행시 주의사항

관련 액션이 자기 저장소의 install.sh 를 실행하는데 그 파일이 실행 권한 없이 커밋되어있다.

그래서 사용할 때는 uses: 가 아닌 run: 으로 직접 실행해줘야 한다.


간단한 스모크 테스트로 CI 성공! 야호~

profile
게임 클라이언트 개발자

0개의 댓글