처음 접한 개념 및 CI 구현하면서 배운 부분 학습 정리용.
프로그램과 그 프로그램이 돌아가는데 필요한 환경(OS 파일, 라이브러리, 설정) 등을 통째로 묶어 놓은 스냅샷 파일.
이 스냅샷을 실행하면 그 안의 환경이 그대로 살아나는데, 실행 중인 것을 컨테이너라고 부른다.
github 가 빌려주는 러너에는 유니티가 없다. 매번 유니티 설치 프로그램을 받아 깔면 20분이 넘는다.
GameCI(유니티용 CI 도구를 만드는 오픈소스)가 "우분투 + 유니티 6000.3.16f 에디터 + 실행에 필요한 라이브러리"를 미리 설치해서 이미지로 구워 Docker Hub 에 올려뒀다. 러너는 이 파일을 내려 받아 컨테이너로 띄우기만 하면 된다.
깃허브 시크릿으로 mail 이랑 password를 secret key로 만들었다.
워크플로에서 ${{ secrets.이름 }}으로 읽는다.
CI 러너는 매번 새 머신이라 앞서 말한 key를 가지고 실행마다 활성화 한다.
코드를 별도 어셈블리로 묶는 파일. 테스트를 별도 asmdef에 둬야 테스트 러너가 인식하고 실제 빌드에는 안 들어간다. 테스트 어셈블리가 게임 코드 어셈블리를 참조하는 구조.
.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 파일은 필요 없다.
관련 액션이 자기 저장소의 install.sh 를 실행하는데 그 파일이 실행 권한 없이 커밋되어있다.
그래서 사용할 때는 uses: 가 아닌 run: 으로 직접 실행해줘야 한다.

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